我试图使用regexp分割一个字符串,它返回数组中的额外元素.请帮忙.以下是该计划:
public class Test {
public static void main(String[] arg){
String str1 = "{abc}{def}";
String delim = "[{}]+";
String[] tokens = str1.split(delim);
for (int i = 0; i < tokens.length; i++) {
System.out.println("token value: "+ tokens[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
token value:
token value: abc
token value: def
Run Code Online (Sandbox Code Playgroud)
为什么第一个令牌空字符串?怎么解决这个问题?
你有空的初始元素的原因是目标字符串以分隔符开头.所以就像分割",1,2"上,会导致三个项目,第一个是空白的,你得到同样的结果.(你不会在得到一个空白结束,因为String#split明确地删除它们,除非你给它一个负的第二个参数.)
如果你知道字符串将以分隔符开头并且它是一个字符,只需删除它:
String[] tokens = str1.substring(1).split(delim);
Run Code Online (Sandbox Code Playgroud)
编辑:或者对于一般情况,请参阅波希米亚的答案,他删除第一个匹配的delim,无论长度如何.
否则,你可以循环:
import java.util.regex.*;
public class SplitTest {
public static void main(String[] arg){
String str1 = "{abc}{def}";
Matcher m = Pattern.compile("\\{([^}]+)\\}").matcher(str1);
while (m.find()) {
System.out.println("token value: " + m.group(1));
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是该模式字符串的细分:
\\{开头相匹配的文字{(和相应)会创建一个捕获组[^}]+意味着"任何不是a的字符中的一个或多个}\\}匹配文字}然后我们循环遍历字符串中的匹配项,获取捕获组的值
| 归档时间: |
|
| 查看次数: |
1285 次 |
| 最近记录: |