调用反向方法

时间:2014-05-26 16:16:59

标签: java

问题:我希望调用reve方法,结果应该是“edcba”。但真正的结果是“abcde”。 reve方法效果不佳。有什么建议可以解决吗?非常感谢

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Reverse {


    public static void main (String args[]) throws IOException

    {
          System.out.println(reve("abcde"));    
    }


    // to reverse a string
    public static String reve(String sentence) {
        StringBuilder sb = new StringBuilder(sentence.length() + 1);
        String[] words = sentence.split(" ");
        for (int i = words.length - 1; i >= 0; i--) {
            sb.append(words[i]).append(' ');
        }
        sb.setLength(sb.length() - 1);  // Strip trailing space
        return sb.toString();
    }

}

4 个答案:

答案 0 :(得分:1)

split因为角色之间没有空格而无法帮助您

 String[] words = sentence.split(" "); 

使用

 char[] words = sentence.toCharArray();

这样你就可以从String中获取字符,而不是使用循环来反转String,因为我认为你正在这样做,而是为字符数组做。

或者您也可以使用charAt(int i)方法。

for (i = sentence.length()-1; i >= 0; i--)
      sb.append(sentence.charAt(i));
    return sb.toString();

<强> 注: 您可以在此处直接使用reverse()StringBuilder

的方法StringBuffer
System.out.println(new StringBuilder(stringVar).reverse().toString());
System.out.println(new StringBuffer(stringVar).reverse().toString());

答案 1 :(得分:1)

因为你要在空间上分割字符串。由于"abcde"没有空格,split只为您提供包含一个元素("abcde")的数组,并将其追加到StringBuilder

由于您已经在使用StringBuilder,因此您只需执行

即可
public static String reve(String sentence) {
    return new StringBuilder(sentence).reverse().toString();
}

答案 2 :(得分:0)

您正在拆分空间。由于字符串"abcde"不包含任何空格,因此只返回一个元素(整个字符串)。

一个简单的解决方案是分成 nothing ,这样你就可以将每个字母分开:

String[] words = sentence.split("");

但最推荐的解决方案是将字符串转换为char数组,因为在这种情况下,将字符存储在String数组中是没有意义的,因为它会每串只有一个字符:

char[] letters = sentence.toCharArray();

答案 3 :(得分:0)

应该正常工作(使用char数组):

public static String reve(String sentence) {

  char[] characters = sentence.toCharArray();
  int i = 0;
  int j = sentence.length()-1;

  while(j > i) {
    char temp = characters[i];
    characters[i] = characters[j];
    characters[j] = temp;
    i++;j--;
  }

  return new String(characters);
}