2014-01-30 147 views
2

我想第一次切片的字符串。使用此代码,如果我输入,例如“一二三”,它可以正常工作,直到最后一个单词。 这是输出的最后几行:切片字符串

当前词是苏氨酸

句话是现在Ë

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 3 
    at java.lang.String.substring(String.java:1907) 
    at TestCurr.main(testCurrentWord.java:18) 

有任何人任何想法,为什么它是最后一个字?

class TestCurr 
{ 
    public static void main (String []args) 
    { 
     String s; 
     int i; 
     String currentWord; 
     int length; 
     int spacePos; 

     System.out.println("Enter a sentence "); 
     s = EasyIn.getString(); 
     spacePos = s.indexOf(" "); 
     length = s.length(); 

     for (i = length -1; i >= 0; i--) 
      { 
       currentWord = s.substring(0,spacePos); 
       s = s.substring(spacePos +1); 

       System.out.println("Current word is " + currentWord); 
       System.out.println("Sentence is now " + s); 
      } 
    } 
} 
+0

考虑您甚至改变's'后做什么_inside_循环。 –

+0

我认为这是家庭作业(或类似),你正试图学习如何自己分割一个字符串。如果没有,你应该使用['String.split'函数](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split%28java.lang.String% 29)。 –

回答

2

你的问题是,你只能得到一次空间的索引。这会导致程序每三个字符切割一次字符串,因为第一个字是三个字母。您需要在每次迭代后更新spacePos。

+0

我有spacePos = s。指数(” ”);现在循环内部,它修复了这个问题,但我仍然得到了异常 – Pizzaman

+2

如果spacePos> = s.length-1,你必须确保它永远不会调用's.substring(spacePos + 1)'。 –

+0

谢谢我会试一试 – Pizzaman

4

首先,你叫

spacePos = s.indexOf(" "); 
length = s.length(); 

只有一次,但是这些值应与循环的每次迭代而改变。此外,

s.substring(spacePos +1); 

spacePos == s.length()-1 

意味着你逝去的索引超过字符串作为start指数substring()结束。一旦你解决了第一个错误,这将是你的下一个异常。

1

我相信你的问题在于你的spacePos变量的使用。

外循环,你初始化变量,像这样:

spacePos = s.indexOf(" "); 

这在“一二三”的字符串的话,收益率3

但随后你的循环里面,你永远不会设置该变量再次基于什么是你还没有处理。

尝试在循环内重新计算spacePos的值,并且问题应该消失。

0

正如其他人所说,你只得到一次索引。但我很好奇,为什么重新发明轮子?

String s = "one two three"; 
String[] split = s.split(" "); 
for (String out : split) { 
    System.out.println("Word: " + out); 
} 
1

您目前的方法太容易出错。 而你有太多的变数。

试试这个只是一个想法。

class TestCurr { 

    public static void main(String[] args) { 
     String s = null; 

     System.out.println("Enter a sentence: "); 
     s = " one two three "; 
     System.out.println("|" + s + "|"); 

     int i = 0; 
     int j = 0; 

     while (true){ 
      while (i<s.length() && s.charAt(i)==' ') i++; 
      j = i; 
      if (i>=s.length()) break; 
      while (i<s.length() && s.charAt(i)!=' ') i++; 
      System.out.println("Current word is: [" + s.substring(j, i)+ "]"); 
      System.out.println("Sentence is now: [" + s.substring(i) + "]"); 
      if (i>=s.length()) break; 
     } 

    } 

}