Я пишу код, чтобы отменить подстроки в строке. Например: Привет мир результат: olleH dlrowjava.lang.StringIndexOutOfBoundsException reverse
public class q05 {
public static void main(String[] args) {
System.out.println("Please enter a string: ");
Scanner sc=new Scanner(System.in);
String str= sc.nextLine();
int length = 0,beginString=0,j=0,i=0;
String reversedString=new String();
while(length<str.length()){ //check all the string
for(i=0;str.charAt(i)!= ' ';i++){
j++;
}
String subString= str.substring(beginString, j); // create substring
String reversedsubString=new String(); // create the blank substring
System.out.println(subString);
while(j>=0){ // reverse the substring
reversedsubString=reversedsubString+subString.charAt(j);
j--;
}
reversedString=reversedString+reversedsubString;
System.out.println(reversedString);
i++;
length++;
}
System.out.println(reversedString);
}
Это дает мне ошибка: java.lang.StringIndexOutOfBoundsException
Где ошибка?
Примечание для вашего будущего: когда вы получаете исключение и спрашиваете об этом, вы также должны отправить трассировку. – Thomas
Одно быстрое наблюдение: 'for (i = 0; str.charAt (i)! = ''; I ++)' - когда вы думаете, что цикл остановится для строк, которые не содержат пробелов? Подсказка: в 'i == str.length()'. А теперь угадайте, как это остановится ... вы правы, с 'StringIndexOutOfBoundsException'. – Thomas
Другое примечание: конкатенация строк может использовать довольно много памяти, так как система создаст новую строку для каждого 'a + b'. Лучше использовать 'StringBuilder' вместе с его' append() 'методами. Btw, 'StringBuilder' также имеет метод' reverse() ', поэтому разделение вашего ввода и изменение отдельных частей может сделать трюк :) – Thomas