2009-02-01 20 views
5

Estoy tratando de hacer un método que devuelva una cadena de palabras en orden inverso.Devolviendo una cadena ingresada como texto inverso en Java

IE/"La lluvia en España cae principalmente en la" volvería: "la de la mayoría cae España bajo la lluvia El"

Para ello supone que no debo usar cualquier construido en las clases de Java Java sólo los de base .

hasta ahora tengo:

lastSpace = stringIn.length(); 

    for (int i = stringIn.length() - 1; i >= 0; i--){ 
     chIn = stringIn.charAt(i); 
     if (chIn == ' '){ 
      word = stringIn.substring(i + 1, lastSpace); 
      stringOut.concat(word); 
      lastS = i; 
     } 
    } 
    word = stringIn.substring(0,lastSpace); 
    stringOut.concat(word); 

    return stringOut; 

Mi problema es cuando stringOut vuelve a su persona que llama es siempre una cadena en blanco.

¿Estoy haciendo algo mal? Tal vez mi uso de string.concat()?

+0

¿Qué quiere decir que debe de sólo utiliza incorporado en las clases de Java? – ecleel

Respuesta

8

En Java, las cadenas son inmutables, es decir, no se pueden cambiar. concat() devuelve una nueva cadena con la concatenación. Por lo que desea algo como esto:

stringOut = stringOut.concat(word); 

o

stringOut += word 

como notas Ray, hay formas más sucintas que hacer esto, sin embargo.

0

Eso es porque hay que asignar el retorno de concat a algo:

stringOut=stringOut.concat(word) 

cadenas en Java (y .net) son inmutables.

1

Lo haría mejor si utiliza el método indexOf de la clase String, en lugar de ese bucle para buscar cada espacio.

-2

me sentí como la codificación, así que aquí va:

 

import java.util.*; 

class ReverseBuffer { 
    private StringBuilder soFar; 
    public ReverseBuffer() { 
     soFar = new StringBuilder(); 
    } 

    public void add(char ch) { 
     soFar.append(ch); 
    } 

    public String getReversedString() { 
     String str = soFar.toString(); 
     soFar.setLength(0); 
     return str; 
    } 
} 

public class Reverso { 
    public static String[] getReversedWords(String sentence) { 
     ArrayList < String > strings = new ArrayList < String >(); 
     ReverseBuffer rb = new ReverseBuffer(); 
     for(int i = 0;i < sentence.length();i++) { 
      char current = sentence.charAt(i); 
      if(current == ' ') { 
       strings.add(rb.getReversedString()); 
      } 
      else { 
       rb.add(current); 
      } 
     } 
     strings.add(rb.getReversedString()); 
     Collections.reverse(strings); 
     return (String[])strings.toArray(new String[0]); 
    } 

    public static void main(String[] args) { 
     String cSentence = "The rain in Spain falls mostly on the"; 
     String words[] = Reverso.getReversedWords(cSentence); 
     for(String word : words) { 
      System.out.println(word); 
     } 
    } 
} 

EDIT: tuvo que llamar getReversedString una vez más después del bucle.

Espero que esto ayude!

2
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.trim(); 
} 

Sólo API utilizada es String (que debe ser permitido cuando la manipulación de cadenas ...)

+0

Bueno, pero debería ser "return reversed.trim();" o agregue alguna regla para la primera iteración ya que agregó un carácter de espacio en blanco al final allí. –

1
public String reverseString(String originalString) 
    { 
    String reverseString=""; 
    String substring[]=originalString.split(" ");// at least one space between this double      //quotes 

    for(int i=(substring.length-1);i>=0;i--) 
     { 
     reverseString = reverseString + substring[i]; 
     } 

     return sreverseString; 
    } 
Cuestiones relacionadas