问题:我希望调用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();
}
}
答案 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);
}