Я беру строки из условия. Вроде, проходит. Дайте строки, которые не должны проходить, пжл.
package com.javarush.task.task15.task1527;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
String str = reader.readLine();
ObjDoubleSort (sort (str));
} catch (IOException e) {e.printStackTrace();}
}
//Метод sort():
public static String sort (String s){ //В результате обрезания строки должна остаться подстрока между "?" и последним "=".
char[] ch = s.toCharArray(); //Оставшиеся "=" и "&" должны быть заменены на пробелы
ArrayList<String> list = new ArrayList<String>();
String str2 = "";
for (int i = 0; i < s.length(); i++){
list.add(i, String.valueOf(ch[i]));} //перевод символов строки в список String
int j = 0;
while (!(list.get(j).equals("?"))){ //удаление символов с начала строки до знака "?", включая его
list.remove(j);}
list.remove(0);
while (!(list.get(list.size()-1).equals("="))){ //удаление символов с конца строки до "=", включая его
list.remove(list.size()-1);}
list.remove(list.size()-1);
for (int i = 0; i < list.size(); i++) { //замена знаков "&" и оставшихся "=" на пробел
if ((list.get(i).equals("&")) || (list.get(i).equals("="))) {list.set(i, " ");}
}
for (String i : list){ str2 += i; } //перевод списка в строку str2 конкатенацией
return str2;
}
//Если присутствует параметр obj, то передать его значение в нужный метод alert.
public static void ObjDoubleSort (String s){ //Результат работы метода sort передается в метод ObjDoubleSort ()
ArrayList<Character> list = new ArrayList<>();
String tempStr = "";
String tempStr2 = "";
String tempStr3 = "";
char[] ch = s.toCharArray();
if (s.substring(0, 3).equals("obj")){
for (int i = 0; i < s.length(); i++){
list.add(i, ch[i]);} //передача элементов строки в список строк
for (int i = list.size() - 1; i >= 0; i--){
if (list.get(i)==' ') {list.remove(i); break;} // при появлении пробела его удалить и завершить цикл
else
tempStr += list.get(i); //перевод списка в строку tempStr конкатенацией
list.remove(i);} //удаление из списка символа, который был передан в строку tempStr
StringBuilder stringBuilder = new StringBuilder(tempStr);
alert("obj " + stringBuilder.reverse());
int i = 0;
while (!(list.get(i) == ' ')){ //удалить элементы списка до пробела, включая его
list.remove(i);}
list.remove(0);
for (int j = 0; j < list.size(); j++ ){ //перевод оставшихся элементов списка в строку tempStr2 конкатенацией
tempStr2 += list.get(j);} //должно остаться только число
if (tempStr2.contains(".")) {alert(Double.parseDouble(tempStr2));}
}
else
{
for (int i = 0; i < s.length(); i++){
list.add(i, ch[i]);} //передача элементов строки в список строк
for (int i = list.size() - 1; i >= 0 ; i--){ //удаление чисел из списка
if(isDigit(list.get(i))) {list.remove(i);}
}
for (int i = 0; i < list.size() ; i++){ //удаление чисел из списка
if((list.get(i)) == ' ') {list.remove(i); break;}
}
for (Character i : list){tempStr3 += i; }
alert(tempStr3); }
}
public static boolean isDigit(Character a){
if (a >= '0' && a <= '9' ) {return true;}
else
return false; }
public static void alert(double value) {
System.out.println("double " + value);}
public static void alert(String value) {
System.out.println(value);}
}