私はこの文字列を持っています:
"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"
より明確にするために。まず->
、文字列を分割するときに無視し、結果の配列から空の文字列を削除する必要があります。
OK、私はあなたが2つのステップでそれを行うことができると思います、例えばすべての不要な文字をスペースで置き換えてからスペースで分割すると、正規表現は次のようになります:
[)(*+/^!@#%&,]|\\b-\\b
あなたのコード:
String[] tokens = function.replaceAll("[)(*+/^!@#%&,]|\\b-\\b", " ").split("\\s+");
以前\\b-\\b
は次のものだけを置き換えていたことに注意してください-
。
または、クリーンなものが必要な場合は、次のように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]
コメントを追加