在Java中拆分字符串和模式匹配

Lau*_*mer 1 java regex split

我有一个以下字符串:

MYLMFILLAAGCSKMYLLFINNAARPFASSTKAASTVVTPHHSYTSKPHHSTTSHCKSSD
Run Code Online (Sandbox Code Playgroud)

我想在每次遇到K或者R遇到时拆分这样的字符串,除非后面跟着a P.

因此,我想要以下输出:

MYLMFILLAAGCSK
MYLLFINNAARPFASSTK
AASTVVTPHHSYTSKPHHSTTSHCK
SSD
Run Code Online (Sandbox Code Playgroud)

起初,我尝试.split()在java中使用简单的函数,但我无法获得所需的结果.因为我真的不知道如何在.split()功能中提及它如果有一个P权利之后不分裂KR.

我看过其他类似的问题,他们建议使用模式匹配,但我不知道如何在这种情况下使用它.

Boh*_*ian 6

你可以使用拆分:

String[] parts = str.split("(?<=[KR])(?!P)");
Run Code Online (Sandbox Code Playgroud)

因为你想要保持你正在拆分的输入,所以你必须使用后面的一个,它断言而不消耗.有两个环顾四周:

  • (?<=[KR])意思是"以前的字符是K或者R"
  • (?!P)意思是"下一个字符是不是一个P"

此正则表达式匹配之间要拆分的字符.


一些测试代码:

String str = "MYLMFILLAAGCSKMYLLFINNAARPFASSTKAASTVVTPHHSYTSKPHHSTTSHCKSSD";
Arrays.stream(str.split("(?<=[KR])(?!P)")).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

输出:

MYLMFILLAAGCSK
MYLLFINNAARPFASSTK
AASTVVTPHHSYTSKPHHSTTSHCK
SSD
Run Code Online (Sandbox Code Playgroud)