1^2^3^4
標準の Java API に、1 行で文字列からトークンを取得できる省略形はありますか? 3番目の要素「3」を抽出したいと思います。正規表現をコンパイルするものは何も必要ありません。コンパイル済みの正規表現で渡すことは問題ありませんが、メソッドが呼び出されるたびに常に正規表現をコンパイルすると、CPU に負担がかかります。
4 に答える
プリコンパイル済みのPatternを使用して簡単に分割できます。
static Pattern regex = Pattern.compile("\\^");
private static String getEntry(String input, int which)
{
return regex.split(input)[which];
}
...または、不要な String オブジェクトを作成しないため、正規表現をまったく使用せずにストレートコードで実行するだけで、より高速になるはずです。
private static String getEntry(String input, int which)
{
int left, right = -1;
do {
left = right;
right = input.indexOf('^', right+1);
}
while(which-- > 0 && right >= 0);
if(which != -1)
return null;
if(right == -1)
return input.substring(left+1);
return input.substring(left+1, right);
}
スプリッター文字を定義できる Scanner クラスがあるため、必要な要素が見つかるまで next() 関数を呼び出すことができます。この状況で正規表現を使用する必要はありません。
を使用してJavaで正規表現をコンパイルできます。Pattern.compile
これにより、Pattern
オブジェクトが生成されます。毎回正規表現をコンパイルしなくても、そのオブジェクトを何度でも再利用できます。コンパイルされたパターンを変数に保存するだけで、必要なときにいつでも取得できます。
の間の任意の数に一致するパターンを定義すると、 を使用して、入力に対してパターンに一致^
するオブジェクトを作成できます。このメソッドは、指定された入力で特定の一致にアクセスできるようにします。Matcher
Pattern.matcher()
Matcher.group(int)
認識されているパフォーマンスの問題のために正規表現を完全に避けたい場合は、反復処理を行うApache Commons StringUtils split()を試すことができます。Java 標準ライブラリ oneとのベンチマークは行っていませんが、ソースを見ると、大きなパフォーマンスの違いを想像するのに苦労しています。