我有这样的字符串
????::????::???::??? (???)::????
Run Code Online (Sandbox Code Playgroud)
我想用java将它拆分为非阿拉伯字符
这是我的代码
String s = "????::????::???::??? (???)::????";
String[] arr = s.split("^\\p{InArabic}+");
System.out.println(Arrays.toString(arr));
Run Code Online (Sandbox Code Playgroud)
输出是
[, ::????::???::??? (???)::????]
Run Code Online (Sandbox Code Playgroud)
但我希望输出是
[????,???,???,???,????]
Run Code Online (Sandbox Code Playgroud)
所以我不知道这有什么问题?
Jer*_*rry 17
你需要一个否定的类,要做到这一点,你需要方括号[ ... ].尝试分裂:
"[^\\p{InArabic}]+"
Run Code Online (Sandbox Code Playgroud)
如果\\p{InArabic}匹配任何阿拉伯字符,那么[^\\p{InArabic}]将匹配任何非阿拉伯字符.
您可以考虑的另一个选项是等效语法,P而不是像@Pshemo所提到的那样p指示与\\p{InArabic}字符类相反的方法:
"\\P{InArabic}+"
Run Code Online (Sandbox Code Playgroud)
这就像是\\W相反的\\w.
第一种语法在第二种语法中获得的唯一可能优势(再次提到@Pshemo),如果你想将其他字符添加到不匹配的字符列表中,例如,如果你想匹配所有非\\p{InArabic}期间,第一个更灵活:
"[^\\p{InArabic}.]+"
^
Run Code Online (Sandbox Code Playgroud)
否则,如果你真的想使用\\P{InArabic},你需要在类中减法:
"[\\P{InArabic}&&[^.]]+"
Run Code Online (Sandbox Code Playgroud)