Задача
Семь решений в процентах
Универсальные идентификаторы ресурсов (или URI) являются строками, например, такие как http://icpc.baylor.edu/icpc/, MAILTO: foo@bar.org, ftp://127.0.0.1/pub/linux, или даже просто readme.txt, что, как правило, используется для идентификации ресурсов в Интернете или на локальном компьютере. Некоторые символы зарезервированы в URI, и если зарезервированный символ является частью идентификатора, то он должен быть процент-закодирован, заменив его знаком процента, за которым следуют две шестнадцатеричные цифры, представляющие ASCII код символа. Таблица семи зарезервированные символы и их кодировка приведена ниже. Ваша задача написать программу, которая может выполнять процент-кодирование заданной строки символов.
Символ | Кодировка |
» » (space) | %20 |
«!» (exclamation point) | %21 |
«$»(dollar sign) | %24 |
«%» (percent sign) | %25 |
«(» (left parenthesis) | %28 |
«)» (right parenthesis) | %29 |
«*» (asterisk) | %2a |
Входные данные
Входные данные состоят из одной или нескольких строк, каждая из 1-79 символов в отдельной строке, а затем строки, содержащей только «#», что свидетельствует об окончании ввода. Символ «#» используется только как маркер окончания входных данных и не содержится в других местах во входных данных. Строка может содержать пробелы, но не в начале или в конце строки, и никогда не содержит двух или более последовательных пробелов.
Выходные данные
Для каждой строки, полученной на входе, заменить каждое вхождение зарезервированного символа в таблице, приведённой выше, на его процент-кодирование, точно так, как это показано в примере, и вывести результирующую строку в отдельной строке. Ещё раз отметим, что процент-кодирование для символа «*» «%2a» (со строчной «а»), а не «%2A» (с прописной буквой «A»).
Тесты
Входные данные | Выходные данные |
Happy Joy Joy! http://icpc.baylor.edu/icpc/ plain_vanilla (**) ? the 7% solution # |
Happy%20Joy%20Joy%21 http://icpc.baylor.edu/icpc/ plain_vanilla %28%2a%2a%29 ? the%207%25%20solution |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import java.util.*; class Main { public static void main (String[] args) throws java.lang.Exception { Scanner scan = new Scanner(System.in); String S; boolean loop = scan.hasNextLine(); while (loop){ S = scan.nextLine(); if (S.equals("#")) break; else{ S = S.replace ("%", "%25"); S = S.replace (" ", "%20"); S = S.replace ("!", "%21"); S = S.replace ("$", "%24"); S = S.replace ("(", "%28"); S = S.replace (")", "%29"); S = S.replace ("*", "%2a"); System.out.println(S); } } } } |
Решение
Создаем цикл в котором с помощью метода replace начиная с «%» (т.к. он будет использоваться в последующих кодировках) заменяем символы на их кодировку в ASCII и печатаем измененную строку. В начале каждого цикла проверяем является ли строка «#».