3

基準に応じて文字列をいくつかのグループに解析する必要がある場合があります

たとえば、以下;

01%3A%35r%07%01P%88%00;WAP_GPRS

2グループであること

%3A%35r%07%01P%88%00
WAP_GPRS

最初の 01 は気にしないことに注意してください。そして、私はそれらすべてを独自のグループに含める必要があります。

もう一つ;

01%3A%35r%07%01P%88%00;KPN;A23B

3 つのグループにする必要があります。

%3A%35r%07%01P%88%00
KPN
A23B

基本的に、英字が先か数字が先かを気にする必要はありません。問題は、0 回以上になる可能性がある式を独自にグループ化することです。以下の意味

01%3A%35r%07%01P%88%00

の 1 つのグループも生成する必要があります。%3A%35r%07%01P%88%00

4

3 に答える 3

2

正規表現は必要ありません:

String data = "01%3A%35r%07%01P%88%00;KPN;A23B"

String groups = s.split(";")

for (String s: groups ){
     System.out.println(s); // I'm printing each separate group
}

元の文字列の最初の 2 文字を削除することは、グループの分離とは関係のない別のことであり、部分文字列メソッドで実行できます。

于 2012-10-18T12:30:09.667 に答える
2

splitの文字列だけではないのはなぜですか;

ただし、その前に、出力に表示されていないため、を使用し01て最初の の前にそれを削除する必要があります。%String#substringrequired

  String str = "01%3A%35r%07%01P%88%00;WAP_GPRS";

  // Remove `01` before first `%`
  str = str.replace(str.substring(0, str.indexOf("%")), "");  

  String[] groups = str.split(";");
  System.out.println(Arrays.toString(groups));

出力: -

[%3A%35r%07%01P%88%00, WAP_GPRS]
于 2012-10-18T12:23:01.387 に答える
1

したがって、splitの正規表現アナログが必要だと思います。それには、繰り返しキャプチャグループが必要になります。

悪いニュース、一部の人々は同様の問題を調べて、正しい答えを見つけられませんでした: https ://stackoverflow.com/a/6836024/1665128

朗報です。グループの数にある程度の制限を設けて生活でき、空の末尾のグループを識別するためのコードを追加できる場合は、次のことが役立つ場合があります。

([^;]*);?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?;?([^;]*)?
于 2012-10-18T12:54:31.317 に答える