在 Java 中反转字符串中的每个单词

问题描述

我尝试创建一种方法来反转字符串数组并返回一个字符串数组,其中所有单词都以相反的顺序排列。但是我的代码不起作用。

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);

解决方法

您的代码有两个问题:

  1. 您已将 input[i] 传递给 new StringBuilder(...),而 input 不是数组。
  2. 您根本没有逐字反转字符串。可以有很多方法来做到这一点。最简单的方法是在空白处拆分字符串,然后以相反的顺序将它们存储在数组中。

演示:

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]
,

您的代码有两个问题:

  1. 您已将 input[i] 传递给 new StringBuilder(...),而 input 不是数组。
  2. 您根本没有逐字反转字符串。可以有很多方法来做到这一点。最简单的方法是在空白处拆分字符串,然后以相反的顺序将它们存储在数组中。
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]