0

文字列の最後の単語を見つける必要があり、コードが機能しない理由がわかりません。これは私が持っているものです:

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

ただし、実行すると最後の文字が印刷されます。私は私が使うことができることを知っています

文字列lastWord=word.substring(word.lastIndexOf( "")+ 1)

しかし、私の先生は私にこのようにさせたくないと確信しています。何か助けはありますか?

4

6 に答える 6

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
}
于 2012-12-06T02:39:01.093 に答える
3

ifステートメントを終了しました。そのはず、

if(j.equals(" "))
{
 ...
}
于 2012-12-06T02:39:03.153 に答える
1

ただそれを外;から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
  }

最小反復。

于 2012-12-06T02:39:41.827 に答える
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;

これは、ヌル文字列の場合もカバーします。

分割を使用する別の方法。

s = s.trim();
String[] strs = new s.split(' ');
return str[str.length-1];
于 2019-08-29T23:09:56.980 に答える
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で始まるため、その最後の要素は配列の長さ-1です。

于 2012-12-06T05:33:33.060 に答える
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
  }
}
于 2012-12-06T02:43:12.790 に答える