xSpartanCx
xSpartanCx

Reputation: 311

Get the last word in a string using a for loop?

I have to find the last word in a string and can't understand why my code isn't working. This is what I have:

int i, length;
String j, lastWord;
String word = "We the people of the United States in order to form a more perfect union";    
length = word.length();    



for (i = length - 1; i > 0; i--)
{
  j = word.substring(i, i + 1);
  if (j.equals(" ") == true);
  {
    lastWord = word.substring(i);
    System.out.println("Last word: " + lastWord);
    i = -1; //to stop the loop
  }
}

However, when I run it, it prints the last letter. I know I could use

String lastWord = word.substring(word.lastIndexOf(" ") + 1)

But I'm pretty sure my teacher doesn't want me to do it this way. Any help?

Upvotes: 0

Views: 2987

Answers (6)

Shivam Shah
Shivam Shah

Reputation: 41

Convert the string to char array and look for space from the end of array. Don't forget to remove white spaces from the end using trim() as they could be counted as separate words.

s = s.trim();
char[] c = s.toCharArray();
for(int i=0; i<c.length; i++)
{
    if(c[c.length-1-i]==' ')
    {
        return s.substring(c.length-1-i);
    }
}
return s;

This also covers the null string case.

Another alternative using split.

s = s.trim();
String[] strs = new s.split(' ');
return str[str.length-1];

Upvotes: 1

wei2912
wei2912

Reputation: 6619

There's a method for strings to split up at http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#split%28java.lang.String%29

Splits this string around matches of the given regular expression.

This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array. 

A good, fast and easier way would be:

word = word.split(" ")[word.length-1];

split() returns an array of substrings based on " ". Since an array starts with 0, its last element is the length of the array - 1.

Upvotes: 0

user1870783
user1870783

Reputation:

Just take that ; from if (j.equals(" ") == true); out.

Your code remade cleaner:

String word = "We the people of the United States in order to form a more perfect union";
for (int i = word.length() - 1; i > 0; i--)
  if (word.charAt(i - 1) == ' ') {
    System.out.println("Last word: " + word.substring(i));
    break; // To stop the loop
  }

Minimum iterations.

Upvotes: 1

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726589

You need to remove the ; after the if to make it work:

if (j.equals(" ")) // <== No semicolon, and no == true
{
    lastWord = word.substring(i);
    System.out.println("Last word: " + lastWord);
    i = -1; //to stop the loop
}

You do not need == true for booleans inside control statements, either.

Finally, making single-character substrings is more expensive than using single characters. Consider using charAt(i) instead:

if (word.charAt(i) == ' ') // Single quotes mean one character
{
    lastWord = word.substring(i+1);
    System.out.println("Last word: " + lastWord);
    break; // there is a better way to stop the loop
}

Upvotes: 4

Diego Basch
Diego Basch

Reputation: 13069

The semicolon after your "if" statement means "do nothing." Also, the "== true" is redundant. Lastly, you don't want to include the space you just found. Try this:

for (i = length - 1; i > 0; i--)
  {
  j = word.substring(i, i + 1);
  if (j.equals(" "))
  {
    lastWord = word.substring(i + 1);
    System.out.println("Last word: " + lastWord);
    i = -1; //to stop the loop
  }
}

Upvotes: 0

KV Prajapati
KV Prajapati

Reputation: 94645

You've terminated the if statement. It should be,

if(j.equals(" "))
{
 ...
}

Upvotes: 3

Related Questions