我正在为学校做这项作业。我试图弄清楚如何从用户给定的字符串中获取单个单词。在我的情况下,单词总是被空格隔开。所以我的代码计算了有多少空格,然后创建了子字符串。如果可以的话请帮忙。

        System.out.print("Please enter a sentence: ");
        String userSentence=IO.readString();

        String testWord="";
        int countSpaces=0;


        for(int j=0; j<userSentence.length(); j++){
            if((userSentence.charAt(j))==' '){
                countSpaces++;

            }
        }


        for(int i=0; i<userSentence.length(); i++){
            if(countSpaces>0){

                while(userSentence.charAt(i)==' '){
                    i++;
                    countSpaces--;
                }

                testWord=userSentence.substring(i, userSentence.indexOf(" "));
                i=i+(testWord.length()-1);

            }

            if(countSpaces==0){
                testWord=userSentence.substring(i);
                i=userSentence.length();
            }

            System.out.print(testWord);

最佳答案

如果我们不必计算空格,则下面的代码会更简洁,但是我假设这是您的约束,因此我继续进行介绍。 (编辑:对JohnG表示赞赏,这是比更改i更好的方法)

问题在于userSentence.indexOf(" ")函数将始终返回找到的第一个" "位置,并且由于您不断增加i但不对userSentence进行任何更改,因此substring(i, userSentence.indexOf(" "))命令不再有意义。

上面的解决方案是声明一个remainder字符串,该字符串跟踪找到下一个userSentence之后剩余的testWord部分。

另一个警告是,如果未找到indexOf(),则" "将返回-1,在这种情况下,这意味着您已经死了。在这种情况下,testWord的将设置为remainder的末尾。

这就是我所拥有的。再次,笨拙,但我试图不重写您拥有的所有内容:

    System.out.print("Please enter a sentence: ");
    String userSentence=IO.readString();

    String testWord="";
    int countSpaces=0;

    for(int j=0; j<userSentence.length(); j++){
        if((userSentence.charAt(j))==' '){
            countSpaces++;
        }
    }

    for(int i=0; i<userSentence.length(); i++){
       while(i<userSentence.length() && userSentence.charAt(i)==' '){
          i++;
          countSpaces--;
       }
       if(i<userSentence.length()){
          String remainder = userSentence.substring(i);

          if(countSpaces==0){
             testWord=userSentence.substring(i);
             i=userSentence.length();
          } else    {
             remainder = userSentence.substring(i);
             int endOfWordIndex = remainder.indexOf(" ");       //  set end of word to first occurrence of " "
             if(endOfWordIndex == -1){                          //  if no " " found,
             endOfWordIndex = remainder.length();           //      set end of word to end of sentence.
          }

          testWord=remainder.substring(0, endOfWordIndex);
          i=i+(testWord.length()-1);
        }

  System.out.println("word: '" + testWord + "'");

10-04 22:43