我想操作一个字符串,我的字符串是:
String string = "dfwx--05-dfpixc3"
Run Code Online (Sandbox Code Playgroud)
我希望我的输出是这样的:
dfwx--05
dfpixc3
Run Code Online (Sandbox Code Playgroud)
所以分隔符是-和不是--
此外,我可以使用 Matcher 类 Pattern 类来解决这个问题吗?
您可以将 split 与此正则表达式\b-\b与Word Boundaries 一起使用,如下所示:
\b表示像插入符号这样的锚(它类似于$和^)匹配一侧是单词字符(如\w)而另一侧不是单词字符(例如它可能是字符串的开头或空格字符)的位置。
String[] split = string.split("\\b-\\b");
Run Code Online (Sandbox Code Playgroud)
因为我的字符串是可变的 后面总是有一个数字——
另一种解决方案可能是使用正向后视,如下所示(?<=\d)-:
String[] split = string.split("(?<=\\d)-");
Run Code Online (Sandbox Code Playgroud)
输出
[dfwx--05, dfpixc3]
Run Code Online (Sandbox Code Playgroud)
您可以使用环视:
(?<!-)-(?!-)
Run Code Online (Sandbox Code Playgroud)
(?<!-) - 确保前面的字符不是破折号- - 确保我们正在查看一个破折号(?!-) - 确保以下字符不是破折号如果我没记错的话,代码应该是:
string.split("(?<!-)-(?!-)");
Run Code Online (Sandbox Code Playgroud)
我不知道哪种在线测试仪最适合 Java,但请参阅https://regex101.com/r/LVXDdH/1以获取 PCRE 示例。
感谢JGFMK提供此 Java 特定测试站点:
https://repl.it/repls/ImpressionableBronzeMice