Java 在字符串中逐字反转

Java 在字符串中逐字反转,java,string,Java,String,我正试图一个字一个字地倒转字符串中的单词。但是我遇到了一点麻烦。我知道很多人使用StringBuilder来解决这个问题,但我想在没有它的情况下尝试一下 输入: Hi there 输出: iH ereht 当前,我的输入字符串在最后一个单词处停止。我假设这是因为在我的代码中,代码的反向部分仅在检测到“”或空格时才会反向。我通过在到达字符串末尾时执行反向部分来改变这一点。i==len但这似乎无法解决问题。我假设if、else-if语句和for循环中存在一些逻辑错误。我想知道是否有人能给我指引正

我正试图一个字一个字地倒转字符串中的单词。但是我遇到了一点麻烦。我知道很多人使用StringBuilder来解决这个问题,但我想在没有它的情况下尝试一下

输入:

Hi there
输出:

iH ereht
当前,我的输入字符串在最后一个单词处停止。我假设这是因为在我的代码中,代码的反向部分仅在检测到“”或空格时才会反向。我通过在到达字符串末尾时执行反向部分来改变这一点。i==len但这似乎无法解决问题。我假设if、else-if语句和for循环中存在一些逻辑错误。我想知道是否有人能给我指引正确的方向

我一直在处理的测试用例字符串是

你好,多格先生

我现在得到的结果是


在你的循环之外反转,检查你是否像这样处于最后一个字-

public static String reverseWord(String str) {
  int len = str.length();
  String reverse = "", temp = " ";

  for (int i = 0; i < len; i++) {
    if (str.charAt(i) != ' ') {
      temp += str.charAt(i);
    } else if (str.charAt(i) == ' ' || i == len) {
      if (i + 1 < len) {
        for (int j = temp.length() - 1; j >= 0; j--) { // reverse
          reverse += temp.charAt(j); // append in reverse
        }
        temp = " ";
      } else {
        temp = "";
      }
    }
  }
  for (int j = temp.length() - 1; j >= 0; j--) { // reverse
    reverse += temp.charAt(j); // append in reverse
  }
  return reverse;
}

在你的循环之外反转,并检查你是否像这样处于最后一个单词-

public static String reverseWord(String str) {
  int len = str.length();
  String reverse = "", temp = " ";

  for (int i = 0; i < len; i++) {
    if (str.charAt(i) != ' ') {
      temp += str.charAt(i);
    } else if (str.charAt(i) == ' ' || i == len) {
      if (i + 1 < len) {
        for (int j = temp.length() - 1; j >= 0; j--) { // reverse
          reverse += temp.charAt(j); // append in reverse
        }
        temp = " ";
      } else {
        temp = "";
      }
    }
  }
  for (int j = temp.length() - 1; j >= 0; j--) { // reverse
    reverse += temp.charAt(j); // append in reverse
  }
  return reverse;
}

经过几次修改后,这一定能奏效。请参阅代码中的注释,以查看我修改的内容

代码:

注:


我删除了嵌套的,因为它不是必需的。

经过几次修改后,这必须起作用。请参阅代码中的注释,以查看我修改的内容

代码:

注:


我删除了嵌套的,因为它不是必需的。

如果我这样做,我只会将整个字符串存储在arraylist中。 然后说:

for(i=0;i<len;i++)
    temp.size()=len;
    temp(length-i)=str(i);
    print temp;

如果我要这样做,我会将整个字符串存储在arraylist中。 然后说:

for(i=0;i<len;i++)
    temp.size()=len;
    temp(length-i)=str(i);
    print temp;
试试这个变化

    for (char c : str.toCharArray()) {
        if (c != ' '){
            temp = c + temp;
        } else {
            reverse += temp + ' ';
            temp = "";
        }
    }
    reverse += temp;
试试这个变化

    for (char c : str.toCharArray()) {
        if (c != ' '){
            temp = c + temp;
        } else {
            reverse += temp + ' ';
            temp = "";
        }
    }
    reverse += temp;

你也可以这样使用循环

   public String reverseString(String str){
       String reverse="";

       for(int i=str.length()-1; i>=0; i--){

           reverse = reverse + str.charAt(i);

       }
          return reverse;

   }

你也可以这样使用循环

   public String reverseString(String str){
       String reverse="";

       for(int i=str.length()-1; i>=0; i--){

           reverse = reverse + str.charAt(i);

       }
          return reverse;

   }

为什么不想使用StringBuilder?如果使用字符串,则每次附加到字符串时都会创建一个新字符串,从而降低效率。至少在C语言中是这样,但我相信Java也是如此。在上面的代码中,for循环的条件是I