使用for循环获取字符串中的最后一个单词?

时间:2012-12-06 02:34:28

标签: java string methods

我必须找到字符串中的最后一个单词,并且无法理解为什么我的代码不起作用。这就是我所拥有的:

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
  }
}

但是,当我运行它时,它会打印最后一个字母。我知道我可以使用

String lastWord = word.substring(word.lastIndexOf(“”)+ 1)

但我很确定我的老师不希望我这样做。有什么帮助吗?

6 个答案:

答案 0 :(得分:4)

您需要在;之后移除if才能使其正常运行:

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

控制语句中的布尔值也不需要== true

最后,制作单字符子串比使用单个字符更昂贵。请考虑使用charAt(i)代替:

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
}

答案 1 :(得分:3)

您已终止if声明。它应该是,

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

答案 2 :(得分:2)

;中取出if (j.equals(" ") == true);

您的代码重新制作了清洁工:

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
  }

最小迭代次数。

答案 3 :(得分:1)

将字符串转换为char数组,并从数组末尾查找空间。不要忘记使用trim()从末尾删除空格,因为它们可以算作单独的单词。

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;

这也涵盖了空字符串的情况。

使用split的另一种选择。

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

答案 4 :(得分:0)

“if”语句后面的分号表示“什么都不做”。此外,“== true”是多余的。最后,您不希望包含刚刚找到的空间。试试这个:

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
  }
}

答案 5 :(得分:0)

有一种方法可以在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. 

一个好的,快速的,更简单的方法是:

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

split()返回基于“”的子字符串数组。由于数组以0开头,因此最后一个元素是数组的长度 - 。