我在 java 中反转给定字符串的每个单词的代码有什么问题?

What is wrong with my code of reversing each word of a given string in java?

提交后说答案错误,请告诉我其中的逻辑错误是什么,而不是格式或其他方式。

public class Solution {
  public static String reverse(String s1){
    int i=s1.length()-1;
    String s2="";
    while(i>=0){
        s2=s2+s1.charAt(i--);     
    }
    s2=s2+' ';
    return s2;
  }
    // Return the reversed string. No need to print

  public static String reverseEachWord(String s1) {
      s1=s1+"";
    String s2="";
    int i=0;
    char ch;
    String temp="";
    while(i<s1.length()){
      ch=s1.charAt(i);
      if(ch!=' '){
        temp=temp+ch;
        i++;  
      }
      else{
        temp=reverse(temp);
        s2=s2+temp;
        temp="";
        i++;
      }
    }
    return s2;  
    }
}

抱歉这么说,但我看到了很多问题。

  • 首先,我建议你下次使用StringBuilder 经常操作字符串。

  • 其次,如果 s1 是一个单词而不是像 s1 = "question" 这样的句子,在您的情况下它将存储在临时文件中并且您的 while 循环结束。 s2 仍然是空的,你得到了一个错误的答案。而且,如果s1是一个有很多词的句子,最后一个词也会出现上述同样的问题。

  • 而且这一行有一个错误temp = reverse(s2);你的s2一开始就是空的,而且会一直这样。我想你想写 temp = reverse(temp);

顺便说一句,我没有 运行 你的代码,现在我只在你的代码中发现了这些问题。

还有很多其他方法可以做到这一点。但是如果你想改变你的代码那么这里是

public static String reverseEachWord(String s1) {

        s1 = s1 + " ";
        String s2 = "";
        int i = 0;
        char ch;
        String temp = "";
        while (i < s1.length()) {
            ch = s1.charAt(i);
            if (ch != ' ') {
                temp = temp + ch;
                i++;
            } else {
                temp = reverse(temp);
                s2 = s2 + temp;
                temp = "";
                i++;
            }

        }

        return s2;

    }

change from temp = reverse(s2); to temp = reverse(temp);

您的 reverseWord 函数存在一些逻辑错误,请将您的函数更新为: 更改

s1 = s1 +"";

s1 = s1 + " ";

因为你需要连接 space.

而不是 if 你可以使用 while 循环,这可以进一步简化你的代码。

public static String reverseEachWord(String s1) {

    s1 = s1 + " ";
    String s2 = "";
    int i = 0;
    char ch;
    String temp = "";
    while (i < s1.length()) {

        while (s1.charAt(i) != ' ') {
            temp = temp + s1.charAt(i);
            i++;
        } 
        temp = reverse(temp);
        s2 = s2 + temp;
        temp = "";
        i++;

    }

    return s2;

}