3

単純な文字列Exがあります。1.0.0.2文字列の一部のみを分割して取得したい:output:基本的に、3番目が含まれた1.0.0後のすべてのテキストを削除したい。.関数を試してsplit()、の発生をカウントし、.2より大きい場合は、indexOf()3番目のポイントとを取得しsubstring()ます。これを達成するためのより簡単またはより速い方法はありますか?多分正規表現を使用してますか?

編集:ドットがいくつあるかわかりません。

4

3 に答える 3

4

正確に 3 つのドットがあるかどうかわからない場合 (つまり使用できない場合lastIndexOf()) は、正規表現ベースのソリューションを次に示します。

final Matcher m = Pattern.compile("^[^.]*(?:[.][^.]*){0,2}").matcher(input);
m.find(); // guaranteed to be true for this regex
final String output = m.group(0);
于 2013-02-07T17:08:07.503 に答える
3

substringと のみを使用してこれを行うのは簡単で高速ですlastIndexOf。コードはかなり読みやすいと思います:

String str = "1.0.0.1";
String output = str.substring(0, str.lastIndexOf("."));

正規表現でも同じことを達成できますが、私は気にしません.はるかに冗長で、理解するのが難しく(少なくとも時間がかかります)、これは妥当なサイズのString.

編集

ドットの数がわからない場合はString、より複雑なアプローチが必要になります。その場合、正規表現で問題ありませんが、 +ruakh の答えはうまく機能します。

より読みやすくしたい場合は (もちろん、読みやすさは正規表現の使いやすさに依存します)、文字列内の文字の出現回数をカウントする補助メソッドを作成し、それを使用して文字列を切り刻むかどうかを決定できます。

于 2013-02-07T17:04:40.787 に答える
1
String input = "1.0.0.2";
String output = input.substring(0, input.lastIndexOf("."));
于 2013-02-07T17:07:25.530 に答える