2017-03-22 10 views
2

区切り文字 "AAHAAAARTFUHLAAAAAHV"を区切り文字 "AAAA"で区切り、区切り文字を含む配列に保存したいとします。 (望ましい出力:[AHHHA、AAAA、RTFUHLA、AAAA、HV])。私は以下のコードを以下に示しますが、出力は希望の出力と同じではありません。Javaで文字列を分割して区切り文字を含める方法

String y = "AHHHAAAAARTFUHLAAAAAHV"; 
    System.out.println(Arrays.toString(y.split("((?<=AAAA)|(?=AAAA))"))); 

出力リレー: [AHHH、A、AAA、A、RTFUHL、A、AAA、A、HV]

+2

試し 'Arrays.toString(y.split("(= AAAA?は、 [^ A] |(?<= AAAA(?= [^ A])))))) '? –

+1

希望の分割ルールがあいまいです。 「AHHHAAAAA」は、「AHHH、AAAA、A」または「AHHHA、AAAA」のいずれかに分けることができます。 'AAAAAAAAA'(9'A's)に期待される成果は? 「AAAAA、AAAA」、または「A、AAAA、AAAA」、または...? – Socowi

+0

@Pavneet_Singh WOW!仕事をしてくれてありがとう!それは大変助けてくれてありがとう。 – user3187367

答えて

0

あなたは(?=AAAA[^A]|(?<=AAAA(?=[^A])))

(?=AAAA[^A]を使用することができます。先読みAAAAに一致するようにすると、非A文字

|:または

(?<=AAAA(?=[^A]))):正ルックの背後にはA文字

String y = "AHHHAAAAARTFUHLAAAAAHV"; 
System.out.println(Arrays.toString(y.split("(?=AAAA[^A]|(?<=AAAA(?=[^A])))"))); 

出力がないことを確認するために先読みしてAAAAにマッチする:

[AHHHA, AAAA, RTFUHLA, AAAA, HV] 
+1

おそらく['(?= AAAA(?!A)|(?<= AAAA(?!A)))'](https://regex101.com/r/2wxBrA/1 )もここで使うのがいいです。 –

+0

@WiktorStribiżew私は先に否定的な見方をテストしましたが、確かに簡潔ですが少し時間がかかっているようです。 –

+0

実際には、彼らは違った働きをすると思います。とにかく、ちょうどその時です。 –