用Java反转给定的句子

gir*_*iri 13 java string reverse

谁能告诉我如何编写Java程序来反转给定的句子?

例如,如果输入是:

"这是一个面试问题"

输出必须是:

"问题采访是这个"

Ode*_*ded 24

您将字符串拆分为空格,然后向后迭代以组合反转句子.

String[] words =  "This is interview question".split(" ");

String rev = "";
for(int i = words.length - 1; i >= 0 ; i--)
{
   rev += words[i] + " ";
}

// rev = "question interview is This "

// can also use StringBuilder:
StringBuilder revb = new StringBuilder();
for(int i = words.length - 1; i >= 0 ; i--)
{
   revb.append(words[i]);
   revb.append(" ");
}
// revb.toString() = "question interview is This "
Run Code Online (Sandbox Code Playgroud)

  • 这不会增加一个尾随空格吗? (7认同)
  • 你是否有理由连接到`string`(每次创建一个新的`string`对象)而不是使用`StringBuilder`? (2认同)

Boz*_*zho 23

String[] words = sentence.split(" ");
String[] reversedWords = ArrayUtils.reverse(words);
String reversedSentence = StringUtils.join(reversedWords, " ");
Run Code Online (Sandbox Code Playgroud)

(使用ArrayUtilsStringUtils来自commons-lang,但这些是简单的方法来编写 - 只需几个循环)

  • 使用外部图书馆来处理面试问题这个简单的事情并不会很好. (7认同)
  • 好.过去的事情并不简单这个问题采访了一个用于图书馆以外的图书馆 (5认同)
  • @ D'Nabre - 如果你知道commons-lang足够好来编写代码,我认为它会非常好. (5认同)

pol*_*nts 19

只是与众不同:一种递归的解决方案.不添加任何额外的空格.

public static String reverse(String s) {
   int k = s.indexOf(" ");
   return k == -1 ? s : reverse(s.substring(k + 1)) + " " + s.substring(0, k);
}


System.out.println("[" + reverse("This is interview question") + "]");
// prints "[question interview is This]"
Run Code Online (Sandbox Code Playgroud)

我也会split通过使用改进解决方案\b(这很明显!).

    String[] parts = "Word boundary is better than space".split("\\b");
    StringBuilder sb = new StringBuilder();
    for (int i = parts.length; i --> 0 ;) {
        sb.append(parts[i]);
    }
    System.out.println("[" + sb.toString() + "]");
    // prints "[space than better is boundary Word]"
Run Code Online (Sandbox Code Playgroud)


Ric*_*ams 6

只需将空格字符拆分为字符串数组,然后以相反的顺序循环遍历数组并构造输出字符串.

String input = "This is interview question";
String output = "";
String[] array = input.split(" ");
for(int i = array.length-1; i >= 0; i--)
{
    output += array[i];
    if (i != 0) { output += " "; }
}
Run Code Online (Sandbox Code Playgroud)


Pop*_*ops 6

Bozho已经给出了一个很好的Java特定答案,但是如果没有Java API方法你需要解决这个问题:

要反转,您可以简单地将单个单词弹出到a上,stack并在没有单词时将其全部弹回.

(为了更清楚,Java确实提供了一个Stack,因此也可以在Java中使用此方法).