package com.javarush.test.level15.lesson12.home09;
/* Парсер реквестов
Считать с консоли URl ссылку.
Вывести на экран через пробел список всех параметров (Параметры идут после ? и разделяются &, например, lvl=15).
URL содержит минимум 1 параметр.
Если присутствует параметр obj, то передать его значение в нужный метод alert.
alert(double value) - для чисел (дробные числа разделяются точкой)
alert(String value) - для строк
Пример 1
Ввод:
http://javarush.ru/alpha/index.html?lvl=15&view&name=Amigo
Вывод:
lvl view name
Пример 2
Ввод:
http://javarush.ru/alpha/index.html?obj=3.14&name=Amigo
Вывод:
obj name
double 3.14
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException {
//add your code here
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String x = reader.readLine();
simpleOutput(x);
objOutput(x);
}
private static void simpleOutput(String x)
{
char[] urlToChars = x.toCharArray();
boolean sw = false; //true - значит, со следующего символа печатаем. false - значит, со следующего символа не печатаем.
int k = 0; //если k > 0 — вместо символа печатаем пробел
for (int i = 0; i < urlToChars.length; i++)
{
String c = String.valueOf(urlToChars[i]);
if (c.equals("="))
{
sw = false;
}
if ((sw) && (!c.equals("&"))) //в случае, если параметры идут друг за другом, через &, то sw не перещёлкивается и дописывает & к параметру. это неравенство проверяет, не является ли печатаемый символ &
{
System.out.print(c); //если sw перещёлкнуто в значение "параметр", печатаем символ
}
if (c.equals("?") || (c.equals("&"))) //если у нас ? или &, печатаем пробел и перещёлкиваем sw
{
if (k > 0) //если sw перещёлкнулось в "параметр" не в первый раз, печатаем пробел
{
sw = true;
System.out.print(" ");
}
else //иначе, не печатаем и делаем "не в первый раз"
{
k++;
sw = true;
}
}
}
}
private static void objOutput(String x)
{
System.out.println();
StringTokenizer stn = new StringTokenizer(x, "?&="); //разбили на токены
boolean num = false; //если obj, то true, параметр - false
while(stn.hasMoreTokens())
{
String tok = stn.nextToken();
if (num)
{
num = false;
try
{
double m = (Double.parseDouble(tok));
alert(m);
}
catch (NumberFormatException e)
{
alert(tok);
}
}
if (tok.equals("obj")) num = true;
}
}
public static void alert(double value) {
System.out.println("double " + value);
}
public static void alert(String value) {
System.out.println("String " + value);
}
}
Leave A Comment