1. ホーム
  2. java

[解決済み] Java String.split() 正規表現

2022-03-09 03:35:39

質問

ある文字列があります。

String str = "a + b - c * d / e < f > g >= h <= i == j";

すべての演算子で文字列を分割したいが、演算子を配列に含めたいので、結果の配列は以下のようになる。

[a , +,  b , -,  c , *,  d , /,  e , <,  f , >,  g , >=,  h , <=,  i , ==,  j]

現在はこんな感じです。

public static void main(String[] args) {
    String str = "a + b - c * d / e < f > g >= h <= i == j";
    String reg = "((?<=[<=|>=|==|\\+|\\*|\\-|<|>|/|=])|(?=[<=|>=|==|\\+|\\*|\\-|<|>|/|=]))";

    String[] res = str.split(reg);
    System.out.println(Arrays.toString(res));
}

これはかなり近い、与える。

[a , +,  b , -,  c , *,  d , /,  e , <,  f , >,  g , >, =,  h , <, =,  i , =, =,  j]

このように、複数文字の演算子を配列に表示させるために、何か工夫が必要でしょうか?

また、それほど重要ではないのですが、正規表現で文字の周りの空白を切り取る方法はあるのでしょうか?

どのように解決するのですか?

String[] ops = str.split("\\s*[a-zA-Z]+\\s*");
String[] notops = str.split("\\s*[^a-zA-Z]+\\s*");
String[] res = new String[ops.length+notops.length-1];
for(int i=0; i<res.length; i++) res[i] = i%2==0 ? notops[i/2] : ops[i/2+1];

これで完了です。すべてうまく res .