Вы не должны переворачивать прочитанную строку, а разбивать ее на коллекцию и переворачивать ее.То, что вы делаете, это поменяйте местами символы, и вы получите следующее:
Yes, 4 Chocolate milk -> klim etalocohC 4 , seY
Если вы разделите строку на ["Yes","4","Chocolate milk"]
, вы можете перевернуть этот массив / список.
Проблема заключается в следующем: Iдумаю, вы хотите сохранить Chocolate milk
в таком порядке, поэтому вам нужно определить, какие слова принадлежат друг другу.Если вы всегда вводите <words>, <number> <words>
, вы можете сначала разделить на ,
, чтобы разделить первый <words>
, а затем на первый пробел для остатка, чтобы разделить число и второй <words>
.
Обновление : попробуйте это:
String input = "Yes sir, 4 Chocolate milk";
//Pattern is:
//- one or more words separated by whitespace as group 1: ((?:\\w+\\s*)+)
//- a comma
//- optional whitespace: \\s*
//- an integer number as group 2: (\\d+)
//- optional whitespace \\s*
//- an arbitrary rest (which might contain anything) as group 3: (.*)
Pattern p = Pattern.compile( "((?:\\w+\\s*)+),\\s*(\\d+)\\s*(.*)" );
Matcher m = p.matcher( input );
List<String> list = new ArrayList<String>();
while(m.find()) {
list.add( m.group( 1 ) );
list.add( m.group( 2 ) );
list.add( m.group( 3 ) );
}
Collections.reverse( list );
for( String s : list) {
System.out.println(s);
}
Вывод должен быть
Chocolate milk
4
Yes sir
Обратите внимание, что это зависит от схемы ввода и предназначено только дляобеспечить начало.Вам также необходимо интегрировать это с другой логикой сопоставления с образцом.