Java拆分未按预期工作
我试图使用一个简单的拆分来拆分以下字符串:00-00000 我的表达式是:Java拆分未按预期工作,java,regex,split,matcher,Java,Regex,Split,Matcher,我试图使用一个简单的拆分来拆分以下字符串:00-00000 我的表达式是:^([0-9][0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9]) 我的用法是: String s = "00-00000"; String pattern = "^([0-9][0-9])(-)([0-9])([0-9])([0-9])([0-9])([0-9])"; String[] parts = s.split(pattern); 如果我使用Pattern和Matc
^([0-9][0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])
我的用法是:
String s = "00-00000";
String pattern = "^([0-9][0-9])(-)([0-9])([0-9])([0-9])([0-9])([0-9])";
String[] parts = s.split(pattern);
如果我使用Pattern和Matcher类,我可以看到我的模式确实匹配,Matcher告诉我我的groupCount是7,这是正确的。但是当我尝试拆分它们时,我没有运气。String.split不会使用捕获组作为其结果。它查找任何匹配项并将其用作分隔符。因此,结果字符串[]是正则表达式匹配的子字符串。由于正则表达式与整个字符串匹配,并且以整个字符串作为分隔符,因此它将返回一个空数组
如果要使用,则必须使用String.split()。对于您的示例,您可以简单地执行以下操作:
String s = "00-00000";
String pattern = "-";
String[] parts = s.split(pattern);
我不能确定,但我认为您要做的是将每个匹配的组放入一个数组中
Matcher matcher = Pattern.compile(pattern).matcher();
if (matcher.matches()) {
String s[] = new String[matcher.groupCount()) {
for (int i=0;i<matches.groupCount();i++) {
s[i] = matcher.group(i);
}
}
}
Matcher-Matcher=Pattern.compile(Pattern.Matcher();
if(matcher.matches()){
字符串s[]=新字符串[matcher.groupCount()){
对于(int i=0;i来自文档:
-->返回:通过围绕给定正则表达式的匹配项拆分此字符串计算的字符串数组
基本上,正则表达式用于定义输入字符串中的分隔符。您可以在模式中使用捕获组和反向引用(例如,对于lookarounds),但最终重要的是模式匹配的内容和位置,因为这定义了进入返回数组的内容
如果要使用正则表达式将原始字符串拆分为7个部分,则可以执行以下操作:
String s = "12-3456";
String[] parts = s.split("(?!^)");
System.out.println(parts.length); // prints "7"
for (String part : parts) {
System.out.println("Part [" + part + "]");
} // prints "[1] [2] [-] [3] [4] [5] [6] "
这将在零长度匹配断言(?!^)
上拆分,该断言位于字符串中第一个字符之前的任何位置。这将防止空字符串成为数组中的第一个元素,并且尾部空字符串已被丢弃,因为我们使用了默认的限制参数拆分
但是,使用正则表达式获取这样的字符串的单个字符是一种过分的做法。如果只有几个字符,那么最简洁的选择是在tocharray()上使用foreach
:
如果字符串较长,则这不是最有效的选项
在-
这也可能是您正在寻找的:
String s = "12-3456";
String[] parts = s.split("-");
System.out.println(parts.length); // prints "2"
for (String part : parts) {
System.out.print("[" + part + "] ");
} // prints "[12] [3456] "
您希望输出结果是什么?在什么时候进行分割?您是否找到了以下任何答案作为解决方案?如果是,请接受能够激励其他人回答您未来问题的答案。您尚未接受任何问题的单一答案。这与我需要的答案非常接近。谢谢!
String s = "12-3456";
String[] parts = s.split("-");
System.out.println(parts.length); // prints "2"
for (String part : parts) {
System.out.print("[" + part + "] ");
} // prints "[12] [3456] "