13
String sentence = "Any simpler way to get the last element of a Java array?";
String lastToken = sentence.split(" ")[sentence.split(" ").length-1];

我想拆分句子并获得最后一个标记。我觉得我这样做的方式有点太尴尬了。基本上,我希望第二个语句更短。那可能吗?

编辑:我在找什么:1)无需单独声明数组 2)无需将句子拆分两次。如果有一个last用数组调用的方法会很好。我怀疑这是不可能的,但想确定一下。

4

4 回答 4

18

获取最后一个标记/单词的另一种方法

String lastToken = sentance.replaceAll(".* ", "");
于 2013-03-09T23:16:00.673 回答
15

您只需要拆分一次,然后取最后一个元素。

String sentence = "Any simpler way to get the last element of a Java array?";
String[] tokens = sentence.split(" ");
String lastToken = tokens[tokens.length-1];

这很尴尬,但是除非您预先知道字符串的长度,否则实际上没有其他方法可以做到这一点。

于 2013-03-09T23:11:30.083 回答
4
String sentence = "Any simpler way to get the last element of a Java array?";
String lastToken = sentence.substring( sentence.lastIndexOf(" ") + 1);
于 2013-03-09T23:15:50.920 回答
4

如果您只这样做一次,那么 Peter Lawrey 的解决方案会更短,尽管 IMO 比原始版本更难理解。

如果您在多个地方执行此操作,那么以下方法会更好:

public String lastToken(String str, String separatorRegex) {
    String tokens[] = str.split(separatorRegex);
    return tokens[tokens.length - 1];
}

进而

String lastToken = lastToken(sentence, " ");

......这比任何聪明的黑客都更优雅...... IMO。


我更一般的观点是,试图缩短单行代码所花费的时间可能是浪费时间......或更糟的是:

  • 从其他人阅读您的代码的角度来看,一行与两行是无关紧要的。
  • 如果使行更短的巧妙技巧晦涩难懂,那么从下一个阅读/维护您的代码的人的角度来看,您实际上使用它做了一件坏事。
  • 如果聪明的 hack 比不雅的版本效率低,您可能已经引入了性能问题。

但是,如果您在很多地方重复该行代码(或类似代码),那么最好的解决方案是使用过程抽象。编写一个静态或实例方法......一次......并多次调用它。

于 2013-03-09T23:21:20.243 回答