Java:获取字符串中最后一个单词的最简单方法

59

在Java中,获取字符串最后一个单词的最简单方法是什么?假设没有标点符号(只有字母和空格)。


有关编程的相关内容:https://dev59.com/dXM_5IYBdhLWcg3w4njb - GreenMatt
3
标题说“最快”,问题询问“最简单”。请澄清一下。 翻译:标题称“fastest”,但问题询问“simplest”,请澄清。 - Mark Bolusmjak
1
最快且最简单的编码和阅读方式。执行时间并不重要。此外,为了搜索目的,拥有不同的措辞更好,尽管差异是无意的。 - Muhd
7个回答

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

11
需要在那里加上一个+1,而且在一个单词上失败了。 - moinudin
一行代码很好,因为我将在Velocity模板代码中使用它。可以与正则表达式结合使用,以考虑其他字符,如JST的解决方案。 - Muhd
2
实际上这个更好,它已经考虑到了单词: String lastWord = test.substring(test.lastIndexOf(" ")+1); - Muhd
1
如果一句话末尾有标点符号怎么办? “这是一个句子?!” - Zippp

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

这是我可能会自己想出来的解决方案,还不错,但一行代码会更好。 - Muhd
1
我并没有说“最快”,我说的是“最简单”,我的意思是指简洁易懂的结合体。 - Muhd
2
如果是我,我认为上面的代码最容易阅读。不过,这也是我立刻想到的解决方案。@OscarRyz的解决方案也很简单易读,所以最终还是取决于个人喜好。 - Dave McClelland
@Dave 可能我的代码不再那么易读,因为我已经添加了一个检查,以防字符串本身是最后一个单词。 - OscarRyz
Umm,parts.length应该去掉括号。 - Timtech
显示剩余2条评论

14
以下是使用String内置的正则表达式功能进行操作的方法:
String lastWord = sentence.replaceAll("^.*?(\\w+)\\W*$", "$1");

这个想法是匹配从^$的整个字符串,在捕获组1中捕获最后一个\w+序列,并使用$1将整个句子替换为它。

演示。


1
这个是实打实的黄金。 - Wesos de Queso
整洁,因为它只有一行代码 - prettyvoid
边缘情况:这在从右到左的语言(例如希伯来语)中失败。@OscarRyz子字符串方法仍然有效。https://ideone.com/MacH0s - CeePlusPlus

12

如果可能存在其他空白字符,那么您需要:

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

5
您可以使用StringUtils(来自Apache Commons Lang)实现此操作。它避免了使用索引的麻烦,使得代码更加易于理解。不幸的是,当输入字符串中没有分隔符时,substringAfterLast返回空字符串,因此我们需要一个if语句来处理这种情况。
public static String getLastWord(String input) {
    String wordSeparator = " ";
    boolean inputIsOnlyOneWord = !StringUtils.contains(input, wordSeparator);
    if (inputIsOnlyOneWord) {
        return input;
    }
    return StringUtils.substringAfterLast(input, wordSeparator);
}

1

获取Kotlin中的最后一个单词:

String.substringAfterLast(" ")

0
  String s="print last word";
    x:for(int i=s.length()-1;i>=0;i--) {
         if(s.charAt(i)==' ') {
                for(int j=i+1;j<s.length();j++) {
                    System.out.print(s.charAt(j));
                }
                break x;
         }
     }

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接