我正在尝试解析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"
有什么建议吗?
答案 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());
}