単純な文字列Exがあります。1.0.0.2
文字列の一部のみを分割して取得したい:output:基本的に、3番目が含まれた1.0.0
後のすべてのテキストを削除したい。.
関数を試してsplit()
、の発生をカウントし、.
2より大きい場合は、indexOf()
3番目のポイントとを取得しsubstring()
ます。これを達成するためのより簡単またはより速い方法はありますか?多分正規表現を使用していますか?
編集:ドットがいくつあるかわかりません。
正確に 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);
substring
と のみを使用してこれを行うのは簡単で高速ですlastIndexOf
。コードはかなり読みやすいと思います:
String str = "1.0.0.1";
String output = str.substring(0, str.lastIndexOf("."));
正規表現でも同じことを達成できますが、私は気にしません.はるかに冗長で、理解するのが難しく(少なくとも時間がかかります)、これは妥当なサイズのString
.
編集
ドットの数がわからない場合はString
、より複雑なアプローチが必要になります。その場合、正規表現で問題ありませんが、 +ruakh の答えはうまく機能します。
より読みやすくしたい場合は (もちろん、読みやすさは正規表現の使いやすさに依存します)、文字列内の文字の出現回数をカウントする補助メソッドを作成し、それを使用して文字列を切り刻むかどうかを決定できます。
String input = "1.0.0.2";
String output = input.substring(0, input.lastIndexOf("."));