用Java反转给定的句子

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

例如,如果输入是:

“这是一个面试问题”

输出必须是:

“问题采访是这个”

String[] words = sentence.split(" "); String[] reversedWords = ArrayUtils.reverse(words); String reversedSentence = StringUtils.join(reversedWords, " "); 

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

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

 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 " 

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

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

我还将使用\b来改进split解决方案(它非常明显!)。

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

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

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

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

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

 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 += " "; } } 

一个无聊的java:

 List l = new ArrayList(Arrays.asList("this is an interview question".split("\\s"))); Collections.reverse(l); StringBuffer b = new StringBuffer(); for( String s : l ){ b.append(s).append(' '); } b.toString().trim(); 

在groovy中它更具可读性:

 "this is an interview question" .split("\\s") .reverse() .join(' ') 

我也尝试一下:这是一个使用堆栈和扫描仪的版本:

 String input = "this is interview question"; Scanner sc = new Scanner(input); Stack stack = new Stack(); while(sc.hasNext()) { stack.push(sc.next()); } StringBuilder output = new StringBuilder(); for(;;) { // forever output.append(stack.pop()); if(stack.isEmpty()) { break; // end loop } else { output.append(" "); } } 
 public class ReverseString { public void reverse(String[] source) { String dest = ""; for (int n = source.length - 1; n >= 0; n--) { dest += source[n] + " "; } System.out.println(dest); } public static void main(String args[]) { ReverseString rs = new ReverseString(); String[] str = "What is going on".split(" "); rs.reverse(str); } } 

可能更好的方法..已经看到了某处的逻辑……我的代码可以完成这项工作。

  public class revWords { public static void main(String[] args) { revWords obj = new revWords(); String print = obj.reverseWords("I am God"); System.out.println(print); } public String reverseWords(String words) { if(words == null || words.isEmpty() || !words.contains(" ")) return words; String reversed = ""; for( String word : words.split(" ")) reversed = word + " " + reversed; return reversed; } } 

我不认为你应该使用任何库.. 1)反向整个字符串2)反转每个单词。

 public static void revWord(char[] a) { // reverse whole revWord(a, 0, a.length); int st = -1; int end = -1; for (int i = 0; i < a.length; i++) { if (st == -1 && a[i] != ' ') { st = i; } if (end == -1 && a[i] == ' ' ) { end = i; } if(i == a.length-1){ end=i+1; } if (st != -1 && end != -1) { revWord(a, st, end ); st = -1; end = -1; } } } public static void revWord(char[] a, int s, int l) { int mid = (l - s) / 2; l--; for (int i = 0; i < mid; i++, l--) { char t = a[s+i]; a[s+i] = a[l]; a[l] = t; } } 

`

请尝试以下解决方案,这对我有用。

 public class reverseline { public static void main(String[] args) { // TODO Auto-generated method stub String str="This is interview question"; String words[]=str.split(" "); for(int i=words.length-1;i>=0;i--){ System.out.print(words[i]+" "); } } } 

没有人提到过基于Java 8的基于Java 8的解决方案,它与Bozho的解决方案相同,但没有任何第三方库。 所以这里是:

 String input = "This is interview question"; List list = Arrays.asList(input.split(" ")); Collections.reverse(list); System.out.println(list.stream().collect(Collectors.joining(" "))); 

在StringTokenizer被声明为遗留之前,许多人使用了StringTokenizer 。 以为我会把它留在这里。

 String sentence = "This is interview question"; String reversed = ""; StringTokenizer tokens = new StringTokenizer(sentence); while (tokens.hasMoreTokens()) { // Loop through each token reversed = tokens.nextToken() + ' ' + reversed; //add to start } System.out.println(reversed.trim()); 

最短的答案

 public class ReverseSentance { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter a sentance"); String inputString = sc.nextLine(); String[] words = inputString.split(" "); List reverseWord = Arrays.asList(words); Collections.reverse(reverseWord); Iterator itr = reverseWord.iterator(); while (itr.hasNext()) { System.out.print(itr.next() + " "); } } 

}

要么

 public class ReverseSentance { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter a sentance"); String inputString = sc.nextLine(); String[] words = inputString.split(" "); for (int i = words.length-1 ; i >= 0; i--) { System.out.print(words[i] +" "); } }