2014-09-11 108 views
2

哟,我正在尝试用Java编写一个程序,它只用字符串和indexOf从字符串中分离单词。我已经制作了这个代码,它运行得几乎完美,但是在打印完单词之后,它会打印出很多空行。使用indexOf&substring字符串在字符串中分离单词

class wordSep{ 
    public static void main(String args[]){ 
     String line = "The world is full of strangers"; 
     String word = line.substring(0,line.indexOf(" ")); 
     int index = line.length()-1; 
     while(index>=0){ 
      System.out.println(word); 
      line = line.substring(line.indexOf(" ") + 1) + " "; 
      word = line.substring(0,line.indexOf(" ")); 
      index--; 
     } 
    } 
} 

这样做的结果应该是:

The 
world 
is 
full 
of 
strangers 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 
\\empty line 

我觉得这与我的while循环的条件下做的。我需要输出没有这些空行..请帮助,谢谢。

回答

2

更换while(index>=0)while(!word.isEmpty()),摆脱index

+0

谢谢,这个解决了我的问题。 – patmarley 2014-09-11 02:34:14

+0

对不起,我刚刚创建了这个帐户分钟前,我如何投票?编辑:哈哈,似乎我已经投了票,什么是菜鸟。 – patmarley 2014-09-11 02:38:06

+0

@patmarley别人投了这个答案,你需要一些声望才能投票。看看[链接](http://stackoverflow.com/help/privileges) – 2014-09-11 02:44:11

-1

即使您似乎已经解决了问题,仍然会发布此答案。我相信,你的代码可以被最小化到只需要几行是这样的:

String line = "The world is full of strangers"; 
int idxOfNextWord = 0; 
for (int i = 0; i < line.length(); i++) { 
    if(line.charAt(i)==' ') { 
     System.out.println(line.substring(idxOfNextWord, i)); 
     idxOfNextWord = i+1; 
    }    
} 
System.out.println(line.substring(idxOfNextWord)); 
+0

谢谢,这是伟大的有几行,我很感激。 – patmarley 2014-09-11 02:46:22

+0

这并没有考虑到硬道理。 – 2014-12-20 22:36:38

+0

@AdamArold,是的。这是最后SOP的目的。 – lxcky 2015-01-05 02:31:28

1

这是伟大的,你的问题就解决了,但如果你尝试将是巨大的在代码中使用一些内置函数(如String.split())和库,因为它可以减少大量处理,并使代码更健壮,并且独立于字符串长度和其他参数。

您的代码可以优化到这个水平......

class wordSep{ 
    public static void main(String args[]){ 
     String line = "The world is full of strangers"; 
     String[] word = line.split(" "); 
     for(String str: word){ 
      System.out.println(str); 
     } 
    } 
} 

输出 -

The 
world 
is 
full 
of 
strangers 

现在你也可以使用字符串标记,但不建议任何更多...

阅读 - >to completely understand how to split Strings in Java on some character, or using some Regex and other parameters

+0

在发布此问题之前,我已经看到了您的解决方案,如果您的问题适用,我不会问这个问题。我需要拆分字符串而不使用拆分和数组。谢谢,下次仔细阅读标题。和平! – patmarley 2014-09-15 02:26:39

+0

我很抱歉。我以为你已经有了一个解决方案,所以我必须向你提出一些不同的建议。 因此,只是为了改进,如果你没有硬编码你的字符串,那么就有机会获得'nullPointerException',你可以在下面的链接中看到如何避免这种情况。虽然它使用了一些额外的行,但行比代码的稳定性更不重要.... http://ideone.com/x7Tdks 感谢您的建议.... – 2014-09-16 11:08:24

0

J.幸运,可以减少SOP的数量和大小,以及像这样:

class Extract 
{ 
    void Substring() 
    {  
     String s = "The World is Full of Strangers."; 
     s = s + " "; 
     int idxOfNextWord = 0; 
     for(int i = 0; i < s.length(); i++) 
     { 
      if(s.charAt(i)== ' ') 
      { 
       System.out.println(s.substring(idxOfNextWord, i)); 
       idxOfNextWord = i+1; 
      }    
     } 
    } 
}