0

1^2^3^4標準の Java API に、1 行で文字列からトークンを取得できる省略形はありますか? 3番目の要素「3」を抽出したいと思います。正規表現をコンパイルするものは何も必要ありません。コンパイル済みの正規表現で渡すことは問題ありませんが、メソッドが呼び出されるたびに常に正規表現をコンパイルすると、CPU に負担がかかります。

4

4 に答える 4

3

プリコンパイル済みの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);
}
于 2013-04-06T10:48:13.223 に答える
1

スプリッター文字を定義できる Scanner クラスがあるため、必要な要素が見つかるまで next() 関数を呼び出すことができます。この状況で正規表現を使用する必要はありません。

于 2013-04-06T17:59:02.230 に答える
1

を使用してJavaで正規表現をコンパイルできます。Pattern.compileこれにより、Patternオブジェクトが生成されます。毎回正規表現をコンパイルしなくても、そのオブジェクトを何度でも再利用できます。コンパイルされたパターンを変数に保存するだけで、必要なときにいつでも取得できます。

の間の任意の数に一致するパターンを定義すると、 を使用して、入力に対してパターンに一致^するオブジェクトを作成できます。このメソッドは、指定された入力で特定の一致にアクセスできるようにします。MatcherPattern.matcher()Matcher.group(int)

于 2013-04-06T10:45:55.740 に答える
0

認識されているパフォーマンスの問題のために正規表現を完全に避けたい場合は、反復処理を行うApache Commons StringUtils split()を試すことができます。Java 標準ライブラリ oneとのベンチマークは行っていませんが、ソースを見ると、大きなパフォーマンスの違いを想像するのに苦労しています。

于 2013-04-06T10:46:03.543 に答える