2011-01-12 19 views
37

Javaの文字列の最後の単語を取得する最も簡単な方法は何ですか?句読点は使用できません(アルファベット文字と空白のみ)。Java:文字列の最後の単語を取得する最も簡単な方法

+0

:http://stackoverflow.com/questions/1181969/java-get-last-element-after-split – GreenMatt

+3

タイトルは "最速" と言う質問には、 "最も簡単な" を要求します。どうか明らかにしてください。 – z5h

+1

コーディングと読み込みに最も高速でシンプルです。実行時間は無関係です。脇見として、矛盾が意図せずにあったにもかかわらず、異なる言い回しを持つことは検索目的の方が良い。 – Muhd

答えて

126
String test = "This is a sentence"; 
String lastWord = test.substring(test.lastIndexOf(" ")+1); 
+7

+1が必要で、1語に失敗します。 – marcog

+0

私はVelocityのテンプレートコードで使っているので、1行はいいです。 JSTのソリューションのような他の文字を説明するために、通常の展開と組み合わせることができます。 – Muhd

+2

実際にはこれは良いです、それはすでに1つの単語を占めています: 文字列lastWord = test.substring(test.lastIndexOf( "")+1); – Muhd

17
String testString = "This is a sentence"; 
String[] parts = testString.split(" "); 
String lastWord = parts[parts.length - 1]; 
System.out.println(lastWord); // "sentence" 
+0

これは私がおそらく自分で考え出した解決策ですが、悪くはありませんが、1つのライナーが良いでしょう。 – Muhd

+0

「最速」と言うと、コードが最短か、実行が最も速いのですか?これは1つのライナーにすることができますが、それは速く実行されず、読みにくいでしょう。 –

+1

私は「最速」とは言わなかったが、私は「シンプル」と言った。これは簡潔さと理解の容易さの組み合わせを意味した。 – Muhd

10

他の空白文字であれば可能であり、そして、あなたがしたいと思います:

testString.split("\\s+"); 
4

あなたは(Apache Commons Langから)StringUtilsでそれを行うことができます。インデックスマジックを避けるため、理解しやすくなります。残念ながらsubstringAfterLastは、入力文字列にセパレータがない場合は空文字列を返しますので、その場合はif文が必要です。アイデアは\w+の最後のシーケンスをキャプチャし、^から$に文字列全体を一致させることです

String lastWord = sentence.replaceAll("^.*?(\\w+)\\W*$", "$1"); 

:ここ

public static String getLastWord(String input) { 
    String wordSeparator = " "; 
    boolean inputIsOnlyOneWord = !StringUtils.contains(input, wordSeparator); 
    if (inputIsOnlyOneWord) { 
     return input; 
    } 
    return StringUtils.substringAfterLast(input, wordSeparator); 
} 
8

は内蔵の正規表現能力String年代を使用して、それを行うための方法ですをキャプチャグループ1に追加し、文全体を$1を使用して置き換えます。関連

Demo.

関連する問題