程序使用字符数组在java中反转一个句子

时间:2014-04-14 18:33:03

标签: string reverse

我必须翻转句子,但问题是我没有得到确切的输出。 如果输入是“今天是星期一”,我的输出是“y a d n o m s m o n d y” 但我必须得到“不管怎么样” 请帮帮我...

public class reversesentence {
    public static void main(String[] args) {
        String sent = "today is monday";
        char ch[] = sent.toCharArray();
        int n= ch.length;

//        System.out.println("before reverse:");
//        for(int i=0;i<n;i++){
//            System.out.print(ch[i]+" ");    
//        }

        for(int i=0; i<n; i++){
            //System.out.println("hello");
             ch[i]= ch[n-i-1];

        }

        System.out.println("\nafter reverse:");
        for(int i=0;i<n;i++){
            System.out.print(ch[i]+" ");    
        }
    }

}

5 个答案:

答案 0 :(得分:0)

如果需要反向字符串,请查看apache commons:

String reversed = org.apache.commons.lang3.StringUtils.reverse(str);

答案 1 :(得分:0)

在你增加i时递减n(并且不要忘记int n = ch.length - 1;
另外,不要忘记进行不同的比较 - n >= 0会浮现在脑海中。

[编辑]
并且还要注意,你不能在原地进行,你需要一个临时的字符串,因为一旦你到了中间,你就没有了字符:) [/编辑]

答案 2 :(得分:0)

这听起来像是学校的编程练习......

public class reversesentence {
    public static void main(String[] args) {
        String sent = "today is monday";
        char ch[] = sent.toCharArray();
        char tmp;
        int length = ch.length;
        int maxNdx = length - 1;
        int stopAt = maxNdx / 2;

        for (int ndx = 0; ndx < stopAt; ndx++) {
            int ndx2 = maxNdx - ndx;
            tmp = ch[ndx];
            ch[ndx] = ch[ndx2];
            ch[ndx2] = ch[ndx];
        }

        System.out.println();
        System.out.print("After reverse: ");
        for(int i=0;i<n;i++){
            System.out.print(ch[i]+" ");    
        }
    }

}

为了在内存中交换两个项目,您需要第三个位置暂时保留其中一个项目。在这种情况下,tmp是临时位置。

要反转数组,您要交换最后一个字符的第一个字符,第二个字符替换第二个字符,等等。因此,您只需要遍历数组的1/2。该函数使用整数除法将最高数组索引分成两半,这实际上为您提供了数学平台(例如,长度为7的数组的最大索引为6,因此中间单元格位于索引3处。)

我保留了您对单个字符的打印,但您可以使用System.out.println(new String(ch))代替。

答案 3 :(得分:0)

试试这个:

public class reversesentence {
 public static void main(String[] args) {
      String sent = "today is monday";
      sent = sent.replaceAll(" ", "");
      char[] s = sent.toCharArray();
      char ch[] = new char[((sent.length()*2)-1)];

      int j = 0;
      int i = 0;
      for(i = sent.length()-1; i>0; i--){
          ch[j] = s[i];       
          j++;
          ch[j] = ' ';
          j++;
      }
      ch[j] = s[i];

      System.out.println(ch);
  }
}

希望这就是你想要的。

答案 4 :(得分:0)

我会在上面的程序中声明一个小的修正,你在那里将值存储到一个临时变量中,但是忘了进一步使用它

ch[ndx2] = tmp;