2009-02-01 6 views
5

J'essaie de créer une méthode qui renvoie une chaîne de mots dans l'ordre inverse.Retour d'une chaîne entrée en tant que texte inversé en Java

IE/« La pluie en Espagne tombe principalement sur la » renverrait: « la sur tombe la plupart du temps l'Espagne sous la pluie La »

Pour cela, je ne suis pas censé utiliser les construit dans les classes Java juste Java de base .

Jusqu'à présent, j'ai:

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; 

Mon problème est quand stringOut est retourné à l'appelant, il est toujours une chaîne vide.

Est-ce que je fais quelque chose de mal? Peut-être mon utilisation de string.concat()?

+0

Que voulez-vous dire de vous devez en utilisant uniquement construit dans les classes java? – ecleel

Répondre

8

En Java, les chaînes sont immuables, c'est-à-dire qu'elles ne peuvent pas être modifiées. concat() renvoie une nouvelle chaîne avec la concaténation. Donc, vous voulez quelque chose comme ceci:

stringOut = stringOut.concat(word); 

ou

stringOut += word 

que les notes Ray, il existe des moyens plus succincts de le faire bien.

0

C'est parce que vous devez affecter le retour de concat à quelque chose:

stringOut=stringOut.concat(word) 

Cordes en Java (et .net) sont immuables.

1

Vous feriez mieux si vous utilisez la méthode indexOf de la classe String, plutôt que cette boucle pour trouver chaque espace.

-2

Je me sentais comme le codage, donc ici vous allez:

 

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: a dû appeler getReversedString une fois de plus après la boucle.

Espérons que cela aide!

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

API uniquement utilisé est une chaîne (qui devrait être autorisée lors de la manipulation des chaînes ...)

+0

Nice, mais devrait être "return reversed.trim();" ou ajoutez une règle pour la première itération depuis que vous avez ajouté un caractère d'espace à la fin. –

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