0
H|\^&|||DiaMed|CM v3.0||||||||20100510124259
P|1|10-001|4000011||Black^Carol|White|19670521|F||
O|1||4000011^^^\^^^|^^^MO01B|R|||||||||||||3||||20100510122212|||F
R|1|^^^AntiA^MO01B^Bloodgroup: ABO/D+ DAT (DiaClon) (5049)|0|C||||R||IH-
----------------------------------------
------------------------------------------
L|1|N

FTP サーバーからダウンロードしている Analyzer から次のメッセージを受け取りました。完全なメッセージかどうかを判断するにはどうすればよいですか。H はメッセージの最初の文字を示し、L は転送セッションの終了を示します。H を示すメッセージの最初のインデックスを取得できますが、L|1|N から L を示す最後のインデックスを取得するにはどうすればよいですか。

4

2 に答える 2

1

String 全体を逆にして firstIndex を選択してみましたか?

何かのようなもの

int index = ((new StringBuffer(inputStirng)).reverse().toString()).indexOf('L'); index = inputString.length() - (index + 1);
実際のインデックスを取得するには、文字列の長さから減算する必要があります

于 2012-10-15T05:27:41.213 に答える
0

すべての行を 1 つの文字列に結合できます。次に、DOTALL モードで次の正規表現を適用します: ^H(.+?)L\|1\|N$

以下の例では、主に複数行の文字列を定義できるようにするため、Groovy を使用しています。それ以外は、Java に変換するのは簡単です。

import java.util.regex.*

def s = """H|\\^&|||DiaMed|CM v3.0||||||||20100510124259
P|1|10-001|4000011||Black^Carol|White|19670521|F||
O|1||4000011^^^\\^^^|^^^MO01B|R|||||||||||||3||||20100510122212|||F
R|1|^^^AntiA^MO01B^Bloodgroup: ABO/D+ DAT (DiaClon) (5049)|0|C||||R||IH-
----------------------------------------
------------------------------------------
L|1|N"""

String regex = '^H(.+?)L\\|1\\|N$'

Pattern p = Pattern.compile(regex, Pattern.DOTALL);
Matcher m = p.matcher(s);
if (m.find()) {
  String text = m.group(1);
  println text
}
于 2012-10-15T07:13:55.057 に答える