我尝试使用"[01.02.2016][0][]"
方法解析字符串"01.02.2016"
到"0"
和String.split(regexp)
,使用下一个正则表达式:"[\\[(*?)\\]]"
或"\\[|\\]"
或{ {1}}。
但是方法总是返回数组"[\\[+\\]]"
。
是["", "01.02.2016","","0"]
的正常结果,还是我在regexp中的错误?
答案 0 :(得分:1)
正如TheLostMind所建议的那样。使用Pattern和Matcher可能的解决方案是:
String s = "[01.02.2016][0][]";
Pattern p = Pattern.compile("(\\[[^\\]]*\\])");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println("part = " + m.group());
}
输出
part = [01.02.2016]
part = [0]
part = []
修改正如Kuzeko所述。如果您想获得没有周围括号[]
的零件,请修改代码如下。
String s = "[01.02.2016][0][]";
Pattern p = Pattern.compile("\\[([^\\]]*)\\]"); // pattern changed
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println("part = " + m.group(1)); // accessed group changed
}
输出
part = 01.02.2016
part = 0
part =
修改至问题的第二部分。 String.split
按照您的要求工作。请参阅以下示例
[\\[(*?)\\]]
- 用作[(*?]
的任何字符作为分隔符(因为它们分组在[...]
String s = "1[2(3*4?5)6]7";
System.out.println(Arrays.toString(s.split("[\\[(*?)\\]]")));
// output
[1, 2, 3, 4, 5, 6, 7]
\\[|\\]
- 用作分隔符[
或]
String s = "1[2]3";
System.out.println(Arrays.toString(s.split("\\[|\\]")));
// output
[1, 2, 3]
[\\[+\\]]
- 用作[+]
的任何字符作为分隔符(因为它们分组在[...]
String s = "1[2[3+4]5";
System.out.println(Arrays.toString(s.split("[\\[+\\]]")));
// output
[1, 2, 3, 4, 5]
如果您未指定结果阈值,则会省略标记空字段。
String s = ",1,2,,,";
System.out.println(Arrays.toString(s.split(",")));
// output
[, 1, 2]
System.out.println(Arrays.toString(s.split(",", 5)));
// output
[, 1, 2, , ,]
有关详细信息如何工作的说明请参阅API String.split(s,int)
答案 1 :(得分:0)
String.split
尝试查找您的模式匹配并相应地拆分。
使用的一个示例是您要基于逗号和分号拆分字符串。
在这种情况下,您将使用" regexp" ,|;
。
在您使用的情况下,例如"\\[|\\]"
,这意味着当它找到一个开括号或一个闭括号时它会分开。
因此,在第一个开放括号之前,相同之后和关闭之前的日期为空,在关闭和打开之间为空,依此类推。
正如@TheLostMind建议的那样,您想要使用Pattern
和Matcher
和组。
答案 2 :(得分:-3)
String name ="[01.02.2016][0][]";
name=name.replaceAll("[^\\d.]", " ").trim();
String[] x1=name.split("[^\\d.]");
System.out.println("name = "+x1[0]);
System.out.println("name = "+x1[2]);
name = 01.02.2016
name = 0