String.split()を使用する方法特定の文字列を除く正規表現に基づいて文字列を分割する方法

a.toraby:

私はこの文字列を持っています:

"round((TOTAL_QTY * 100) / SUM(ORDER_ITEMS->TOTAL_QTY) , 1)"

次のコードを使用して文字列を分割しようとしました:

String[] tokens = function.split("[ )(*+-/^!@#%&]");

結果は次の配列です。

"round"
""
"TOTAL_QTY"
""
""
"100"
""
""
""
"SUM"
"ORDER_ITEMS"
"->TOTAL_QTY"
""
""
""
"1"

しかし、私は次のように文字列を分割する必要があります:

"round",
"TOTAL_QTY",
"100",
"SUM",
"ORDER_ITEMS->TOTAL_QTY",
"1"

より明確にするために。まず->、文字列を分割するときに無視し、結果の配列から空の文字列を削除する必要があります。

YCF_L:

解決策1

OK、私はあなたが2つのステップでそれを行うことができると思います、例えばすべての不要な文字をスペースで置き換えてからスペースで分割すると、正規表現は次のようになります:

[)(*+/^!@#%&,]|\\b-\\b

あなたのコード:

String[] tokens = function.replaceAll("[)(*+/^!@#%&,]|\\b-\\b", " ").split("\\s+");

以前\\b-\\bは次のものだけを置き換えていたことに注意してください-

解決策2

または、クリーンなものが必要な場合は、次のようにMatcherでパターンを使用できます。

Pattern.compile("\\b\\w+->\\w+\\b|\\b\\w+\\b")
        .matcher("round((TOTAL_QTY * 100) / SUM(ORDER_ITEMS->TOTAL_QTY) , 1)")
        .results()
        .map(MatchResult::group)
        .forEach(s -> System.out.println(String.format("\"%s\"", s)));

正規表現のデモ

細部

  • \b\w+->\w+\b その特別なケースにマッチする ORDER_ITEMS->TOTAL_QTY
  • | または
  • \b\w+\b 単語の境界を持つその他の単語

このソリューションはJava9 +で機能しますが、単純なパターンおよびマッチャーソリューションを使用できます。

アウトプット

"round"
"TOTAL_QTY"
"100"
"SUM"
"ORDER_ITEMS->TOTAL_QTY"
"1"

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ