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

文を分割して最後のトークンを取得したいと思います。自分のやり方がややこしすぎる気がします。基本的には、2 番目のステートメントを短くしたいと考えています。それは可能ですか?

編集:私が探しているもの:1)配列を個別に宣言する必要はありません2)文を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。


私のより一般的なポイントは、コードの 1 行を短くしようとして費やされた時間は、おそらく無駄な時間であるということです。

  • SOMEONE ELSE がコードを読むという観点からは、1 行対 2 行は関係ありません。
  • 行を短くする巧妙なハックがわかりにくい場合は、それを使用して実際に悪いことをしたことになります...コードを読んだり保守したりする次の人の観点から。
  • 巧妙なハックが洗練されていないバージョンよりも効率的でない場合は、パフォーマンスの問題が発生している可能性があります。

しかし、そのコード行 (または同様のもの) を多くの場所で繰り返している場合、最善の解決策は手続き型抽象化を使用することです。静的メソッドまたはインスタンス メソッドを ... 1 回 ... 記述し、それを複数回呼び出します。

于 2013-03-09T23:21:20.243 に答える