问题描述
我尝试创建一种方法来反转字符串数组并返回一个字符串数组,其中所有单词都以相反的顺序排列。但是我的代码不起作用。
public static String[] reverse(String input) {
String[] reversed = new String[input.length()];
for (int i = 0; i < input.length(); i++){
StringBuilder sb = new StringBuilder(input[i]);
reversed[i] = sb.reverse().toString();
}
return reversed;
}
StringBuilder 行中的输入显示错误“预期的数组类型;找到:'java.lang.String'。我无法弄清楚。
预期结果显示如下:
String[] reversed = StringReverser.reverse("grey fox jumps over dog");
assertArrayEquals(new String[] {
"dog","over","jumps","fox","grey"},reversed);
解决方法
您的代码有两个问题:
- 您已将
input[i]
传递给new StringBuilder(...)
,而input
不是数组。 - 您根本没有逐字反转字符串。可以有很多方法来做到这一点。最简单的方法是在空白处拆分字符串,然后以相反的顺序将它们存储在数组中。
演示:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
System.out.println(Arrays.toString(reverse("grey fox jumps over dog")));
}
public static String[] reverse(String input) {
String[] words = input.split("\\s+");
String[] reversed = new String[words.length];
for (int i = 0; i < words.length; i++) {
reversed[words.length - i - 1] = words[i];
}
return reversed;
}
}
输出:
[dog,over,jumps,fox,grey]
,
您的代码有两个问题:
- 您已将
input[i]
传递给new StringBuilder(...)
,而input
不是数组。 - 您根本没有逐字反转字符串。可以有很多方法来做到这一点。最简单的方法是在空白处拆分字符串,然后以相反的顺序将它们存储在数组中。
public static String[] reverse(String input) {
String[] words = input.split("\\s+");
for (int i = 0,j = words.length - 1; i < j; i++,j--)
swap(words,i,j);
return words;
}
private static void swap(String[] arr,int i,int j) {
String tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
演示:
String[] res = reverse("grey fox jumps over dog");
System.out.println(Arrays.toString(res)); // [dog,grey]