使用模式在Java中解析字符串

时间:2012-01-19 20:01:10

标签: java parsing

我正在尝试解析String中的3条信息。

这是我的代码:

text = "H:7 E:7 P:10";
String pattern = "[HEP]:";

Pattern p = Pattern.compile(pattern);

String[] attr = p.split(text);

我希望它返回:

String[0] = "7"
String[1] = "7"
String[2] = "10"

但我得到的只是:

String[0] = ""
String[1] = "7 "
String[2] = "7 "
String[3] = "10"

有什么建议吗?

4 个答案:

答案 0 :(得分:4)

我刚设计的一个不那么优雅的解决方案:

String text = "H:7 E:7 P:10";
String pattern = "[HEP]:";
text = text.replaceAll(pattern, "");
String[] attr = text.split(" ");

答案 1 :(得分:2)

来自javadoc,http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#split(java.lang.CharSequence):

  

此方法返回的数组包含输入的每个子字符串   由与此匹配的另一个子序列终止的序列   模式或由输入序列的结尾终止。

首先得到空字符串,因为在字符串的开头有匹配,似乎。

如果我尝试使用String text =" A H:7 E:7 P:10"我确实得到了:

  

A 7 7 10

希望它有所帮助。

答案 2 :(得分:1)

我会写一个完整的正则表达式,如下所示:

Pattern pattern = Pattern.compile("H:(\\d+)\\sE:(\\d+)\\sP:(\\d+)");
Matcher matcher = pattern.matcher("H:7 E:7 P:10");
if (!matcher.matches()) {
    // What to do!!??
}
String hValue = matcher.group(1);
String eValue = matcher.group(2);
String pValue = matcher.group(3);

答案 3 :(得分:1)

根据您的评论,我认为您只想从该字符串中获取数字(按特定顺序?)。

所以我会推荐这样的东西:

Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("H:7 E:7 P:10");
while(m.find()) {
    System.out.println(m.group());
}