views:

2913

answers:

5

Hi,

I'm trying to make a method that returns a string of words in opposite order.

IE/ "The rain in Spain falls mostly on the" would return: "the on mostly falls Spain in rain The"

for this i am not supposed to use any built in Java classes just basic java

So far i have:

    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;

My problem is when stringOut is returned to its caller it always is a blank string.

Am i doing something wrong? Maybe my use of string.concat()?

Any help would be much appreciated. Thank you

+5  A: 

In Java, Strings are immutable, i.e. they can't be changed. concat() returns a new string with the concatenation. So you want something like this:

stringOut = stringOut.concat(word);

or

stringOut += word

as Ray notes, there are more succinct ways to do this though.

Dave Ray
A: 

That's because you need to assign the return of concat to something:

stringOut=stringOut.concat(word)

Strings in Java (and .net) are immutable.

Software Monkey
+1  A: 

You would do better if you use the indexOf method of String class, rather than that loop to find each space.

Tiago
A: 
Geo
+1  A: 
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;
}

Only API used is String (which should be allowed when manipulating Strings...)

John Nilsson