用Java反转给定的句子
谁能告诉我如何编写Java程序来反转给定的句子?
例如,如果输入是:
“这是一个面试问题”
输出必须是:
“问题采访是这个”
String[] words = sentence.split(" "); String[] reversedWords = ArrayUtils.reverse(words); String reversedSentence = StringUtils.join(reversedWords, " ");
(使用来自commons-lang的ArrayUtils
和StringUtils
,但这些是简单的编写方法 – 只需几个循环)
您将字符串拆分为空格,然后向后迭代以组合反转句子。
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] +" "); } }