【问题标题】:Separating words from a string using indexOf & substring methods in Java在 Java 中使用 indexOf 和 substring 方法从字符串中分离单词
【发布时间】:2014-11-04 20:24:06
【问题描述】:

哟,我正在尝试用 Java 编写一个程序,该程序仅使用 substring 和 indexOf 将单词与字符串分开。我已经编写了这段代码,它运行起来几乎完美,但在打印单词后会打印很多空行。

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 循环的条件有关。我需要一个没有那些空行的输出。请帮忙,谢谢。

【问题讨论】:

    标签: java string substring indexof separator


    【解决方案1】:

    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;
                }            
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      您的问题得到解决真是太好了,但如果您尝试在代码中使用一些内置函数(如 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
      

      现在你也可以使用 String Tokenizer 但是不推荐了……

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

      【讨论】:

      • 我在发布这个问题之前就已经看到了你的解决方案,如果你的解决方案适用,我不会问这个问题。我的需要在不使用拆分和数组的情况下拆分字符串。谢谢,下次仔细看标题。和平!
      • 对此我很抱歉。我认为您已经有了解决方案,所以我必须向您提出一些不同的建议。因此,为了改进,如果您没有对您的字符串进行硬编码,那么就有可能获得nullPointerException,您可以在下面的链接中的示例中看到如何避免这种情况。虽然它使用了一些额外的行,但行不如代码的稳定性重要....ideone.com/x7Tdks 感谢您的建议....
      【解决方案3】:

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

      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));
      

      【讨论】:

      • 谢谢,少了几行真是太好了,我很感激。
      • 这里不考虑最后一个字。
      • @AdamArold,是的。这就是上一个 SOP 的目的。
      【解决方案4】:

      while(index&gt;=0) 替换为while(!word.isEmpty()) 并去掉index

      【讨论】:

      • 对不起,我刚刚在几分钟前创建了这个帐户,我该如何投票?编辑:哈哈,看来我已经投票了,真是个菜鸟。
      • @patmarley 其他人对此答案投了票,您需要一些声誉才能投赞成票。看看link
      • @patmarley 当您的帐户至少有15 reputation 时,您将能够投票。更多信息请访问privileges。现在你可以accept你认为最有用的答案之一。
      • @Jean - 如果我被要求不使用 .isEmpty(),我的 while 语句还可以使用什么其他条件?
      最近更新 更多