2011-03-09 59 views
0
Scanner kb = new Scanner(System.in); 

System.out.print(">> "); 
String line = kb.nextLine(); 

line = line.trim(); 
int i = 0; 

do { 
    int j = i; 
    while ((!line.substring(j, j + 1).equals(" ")) && (j < line.length())) { 
    //while ((j < line.length())&&(!line.substring(j, j + 1).equals(" "))) { 
    j++; 
    } 
    System.out.println("-> " + line.substring(i, j)); 
    i = j; 
    while ((line.substring(i, i + 1).equals(" "))&&(i<line.length())) { 
    //while ((i < line.length()) && (line.substring(i, i + 1).equals(" "))) { 

    i++; 
    } 
}while (i < line.length()); 

为什么表达....普通表达

while ((!line.substring(j, j + 1).equals(" ")) && (j < line.length())) 

不等于与

while ((j < line.length())&&(!line.substring(j, j + 1).equals(" "))) 
+0

因为在使用逻辑与时,如果AND运算中的第一个操作数计算结果为false,那么下一个操作数将不会被计算。 – bhups 2011-03-09 05:40:22

回答

1

因为字符串可以为长度为0在这种情况下,你会得到一个异常的ArrayIndexOutOfBounds的。

+0

或更具体地说,当'j == line.length() - 1'时,您尝试使用超出边界的索引来获取子字符串。 – asgs 2011-03-09 05:39:54