我正在编写一个程序来反转句子中的单词顺序。 (例如“红帽属于约翰”=>“约翰属于帽子红色”)我自己走过了do-while循环,但我不明白为什么会有一个索引异常。
感谢您的帮助,
JonBrown
例外:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -23
at java.lang.String.substring(Unknown Source)
at WordReverse.main(WordReverse.java:17)
代码:
public class WordReverse
{
public static void main(String[] args)
{
String input = "The red had belongs to John";
String reverse = "";
int lastSpace = 0;
do
{
//Isolate Word w/ Preceding Space
int startIndex = lastSpace;
int endIndex = input.indexOf(' ', startIndex + 1);
//Add Word to front of String
reverse = input.substring(startIndex, endIndex) + reverse;
//Add Preceding Space for First Iteration
if (lastSpace == 0) reverse = " " + reverse;
//Reset Last Space
lastSpace = endIndex;
// Repeat Loop Until line14 .indexOf returns -1 due to lack of " ".
}while (lastSpace != -1);
System.out.println(reverse);
}
}
答案 0 :(得分:0)
来自MSDN String.Substring Method (Int32, Int32)
public string Substring(
int startIndex,
int length
)
它应该是这样的:
reverse += input.substring(startIndex, endIndex - startIndex);
答案 1 :(得分:0)
为方便起见,只需使用拆分
String input = "The red had belongs to John";
String arr[] = input.split(" ");
for (int x = arr.length -1; x >= 0; x--)
System.out.println(arr[x]);
答案 2 :(得分:0)
这个解决方案更优雅:
public class WordReverse
{
public static void main(String[] args)
{
String input = "The red had belongs to John";
String array = input.split(" ");
for( int i = array.length()-1; i >= 0; i++ )
System.out.print( array[ i ] + " " );
System.out.println();
}
}
答案 3 :(得分:0)
当您到达最后一个空格(“John”之前)时,endIndex
值为-1。然后,您尝试使用小于subString()
的{{1}}来调用endIndex
,这会导致崩溃。
答案 4 :(得分:0)
正如其他人所说,你的问题是lastIndex
为-1。当发生这种情况时,此修复程序会中断循环,但在将字符串的其余部分复制到结果之前不会:
public class WordReverse
{
public static void main(String[] args)
{
String input = "The red hat belongs to John";
String reverse = "";
int lastSpace = 0;
do
{
//Isolate Word w/ Preceding Space
int startIndex = lastSpace;
int endIndex = input.indexOf(' ', startIndex+1);
if (endIndex==-1) {
reverse = input.substring(startIndex) + reverse;
break;
}
//Add Word to front of String
reverse = input.substring(startIndex, endIndex) + reverse;
//Add Preceding Space for First Iteration
if (lastSpace == 0) reverse = " " + reverse;
//Reset Last Space
lastSpace = endIndex;
// Repeat Loop Until line14 .indexOf returns -1 due to lack of " ".
}while (true);
System.out.println(reverse);
}
}