Invertir una oración dada en Java

¿Alguien puede decirme cómo escribir un progtwig Java para invertir una oración dada?

Por ejemplo, si la entrada es:

“Esta es una pregunta de entrevista”

La salida debe ser:

“la entrevista de preguntas es esto”

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

(usando ArrayUtils y StringUtils de commons-lang, pero estos son métodos fáciles de escribir, solo unos pocos bucles)

Se divide la cuerda por el espacio y luego se itera hacia atrás para ensamblar la oración invertida.

 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 " 

Simplemente siendo diferente: una solución recursiva. No agrega espacios adicionales.

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

También mejoraré la solución split utilizando \b lugar (¡es tan obvio!).

  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 ya dio una gran respuesta específica de Java, pero en caso de que alguna vez necesite resolver este problema sin los métodos de la API de Java:

Para revertir, puede simplemente hacer estallar palabras individuales en una stack y hacer que se apaguen todas cuando no queden palabras.

(Para ser más claros, Java proporciona una clase Stack , por lo que también es posible utilizar este método en Java).

Simplemente divídalo en un carácter de espacio en una matriz de cadenas, luego recorra la matriz en orden inverso y construya la cadena de salida.

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

un poco aburrido de 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(); 

en groovy es un poco más legible:

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

También lo bash: aquí hay una versión que usa una stack y un escáner:

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

Un acercamiento más agradable probablemente … había visto la lógica en alguna parte … aquí está mi código que podría hacer el trabajo.

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

No creo que deba usar ninguna biblioteca … 1) Invertir toda la secuencia 2) Invertir cada palabra.

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

`

Por favor, pruebe la siguiente solución, esto está funcionando para mí.

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

Nadie ha mencionado aún una solución vanilla basada en Java 8, que es la misma que la de Bozho , pero sin ninguna biblioteca de terceros. Asi que aqui esta:

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

Antes de que StringTokenizer fuera declarado heredado, muchos usaron StringTokenizer para esto. Pensé que lo dejaría aquí.

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

Respuesta más corta

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

}

O

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