2009-02-01 4 views
5

Ich versuche eine Methode zu erstellen, die eine Zeichenfolge in umgekehrter Reihenfolge zurückgibt.Zurückgeben einer Zeichenfolge, die als umgekehrter Text in Java eingegeben wurde

IE/„Die regen in Spanien fällt hauptsächlich auf die“ zurückkehren würde: „die am meist Spanien in regen fällt die“

dieses Denn ich nicht gebaut in Java-Klassen nur grundlegende Java verwenden, bin soll .

Bisher habe ich:

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; 

Mein Problem ist, wenn stringOut an seinen Aufrufer zurückgegeben wird, ist es immer eine leere Zeichenfolge.

Mache ich etwas falsch? Vielleicht meine Verwendung von string.concat()?

+0

Was Sie Sie meinen nur in Java-Klassen gebaut muss mit? – ecleel

Antwort

8

In Java sind Strings unveränderlich, d. H. Sie können nicht geändert werden. concat() gibt eine neue Zeichenfolge mit der Verkettung zurück. Sie will also so etwas wie diese:

stringOut = stringOut.concat(word); 

oder

stringOut += word 

als Ray Noten gibt es prägnante Möglichkeiten, dies obwohl zu tun.

0

Das ist, weil Sie die Rückkehr von concat- etwas zuweisen müssen:

stringOut=stringOut.concat(word) 

Strings in Java (und .net) sind unveränderlich.

1

Sie würden besser, wenn Sie die indexOf-Methode der String-Klasse verwenden, anstatt diese Schleife, um jeden Raum zu finden.

-2

fühlte ich mich wie Codierung, so hier geht:

 

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: hatte getReversedString einmal mehr nach der Schleife zu nennen.

Hoffe, das hilft!

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

Nur API verwendet wird, ist String (die erlaubt sein sollte, wenn Strings zu manipulieren ...)

+0

Schön, aber sollte "zurück kehren.trim();" oder fügen Sie eine Regel für die erste Iteration hinzu, da Sie dort am Ende ein Leerzeichen eingefügt haben. –

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