Вроде, выводит как требуется по условию.
package com.javarush.task.task15.task1527;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String URL = reader.readLine();
sort(URL); }
public static void sort(String url){
List<String> listParam = new ArrayList<String>();
char[] array = url.toCharArray();
String tmp = "";
String tmpNumber = null;
Double num = null;
// http://javarush.ru/alpha/index.html?lvl=15&view&name=Amigo вывод в консоль: lvl view name
// http://javarush.ru/alpha/index.html?obj=3.14&name=Amigo вывод в консоль: obj name
// double: 3.14
for(int i = 0; i < array.length; i++ ){ // проход символьного массива с урлом
if (array[i] == '?') { // если достигнут символ '?'
int m = i; // временная переменная для следующего цикла while (чтобы не сбить значение внешнего цикла for)
while (array[m + 1] != '='){ // начать проход символьного массива, начиная со следующего знака после '?', пока не будет достигнут символ '='
tmp += Character.toString(array[m + 1]); // преобразовывать каждый символ в строку и конкатинировать его с предыдущим, получив в итоге параметр, присвоенный ссылке tmp
m++; // индекс следующего элемента массива для цикла while
}
listParam.add(tmp); // по завершении цикла while внести полученный параметр в список listParam
if (tmp.equals("obj")){ // ну а если этот параметр еще и "obj", то начинается настоящий трэш:
for (int k = 0; k < array.length; k++){// снова проход символьного массива с урлом
if (array[k] == '=') { // по достижении символа '='
m = k; // временная переменная для следующего цикла while (чтобы не сбить значение внешнего цикла for)
tmp = ""; // присвоить ссылке tmp пустую строку
while (array[m + 1] != '&') { // и начать проход символьного массива, начиная со следующего знака после '=', пока не будет достигнут символ '&'
tmp += Character.toString(array[m + 1]); //преобразовывать каждый символ в строку и конкатинировать его с предыдущим, получив в итоге параметр, присвоенный ссылке tmp
m++; // индекс следующего элемента массива для цикла while
}
if (tmp.contains(".")) { //если переменная содержит точку
num = Double.parseDouble(tmp); //пропарсить временную переменную tmp в переменную num типа Double
}
else
{tmpNumber = tmp;} //иначе присвоить ее значение переменной tmpNumber типа String
break;
}
}
}
tmp = "";
}
else // присвоить ссылке tmp пустую строку
if (array[i] == '&') { // если достигнут символ '&'
int m = i; // временная переменная для следующего цикла while (чтобы не сбить значение внешнего цикла for)
while ((array[m + 1] != '&') && (array[m + 1] != '=')){ // начать проход символьного массива, начиная со следующего знака после '&', пока не будет достигнут символы '&' или '='
tmp += Character.toString(array[m + 1]); // преобразовывать каждый символ в строку и конкатинировать его с предыдущим, получив в итоге параметр, присвоенный ссылке tmp
m++; // индекс следующего элемента массива для цикла while
}
listParam.add(tmp); // по завершении цикла while внести полученный параметр в список listParam
tmp = "";
}
}
for(String e : listParam){ // вывести содержимое списка listParam
System.out.print(e + " ");} // в консоль
System.out.println();
if (num != null){alert(num);} // если в переменной num с double-параметром что-то есть вызвать метод alert(num)
else
if (tmpNumber != null)
{alert(tmpNumber);} // иначе вызвать метод с String-параметром alert(tmpNumber)
}
public static void alert(double value) {
System.out.println("double: " + value);
}
public static void alert(String value) {
System.out.println("String: " + value);
}
}