我正在寻找一种解析字符串中信息某些部分的好方法。
例如,字符串可能是
“id:1234警告:a-b up:12.3 down:12.3”
我需要选择id
,alert
,up
和down
的值,所以我最初的想法是子串,但后来我想到了字符串的长度可以改变大小,例如
“id:123456警告:a-b-c-d up:12.345 down:12.345”
因此,每次使用子字符串查看字符3到7可能每次都不起作用,因为它不会捕获所需的所有数据。
选择所需的每个值的智能方法是什么?希望我能很好地解释这一点,因为我通常倾向于将人们与我的错误解释混为一谈。我用Java编程。
答案 0 :(得分:1)
基于正则表达式的基本解决方案可能如下所示:
String input = "id:1234 alert:a-b up:12.3 down:12.3";
Matcher matcher = Pattern.compile("(\\S+):(\\S+)").matcher(input);
while (matcher.find()) {
System.out.println(matcher.group(1) + " = " + matcher.group(2));
}
这假设您正在寻找一个或多个非空白字符,然后是冒号,然后是一个或多个非空白字符。
输出:
id = 1234
alert = a-b
up = 12.3
down = 12.3
答案 1 :(得分:1)
您可以简单地使用String.split(),首先标记空格,然后在键/值分隔符上进行标记(在这种情况下为冒号):
String line = "id:1234 alert:a-b up:12.3 down:12.3";
// first split the line by whitespace
String[] keyValues = line.split("\\s+");
for (String keyValueString : keyValues) {
String[] keyValue = keyValueString.split(":");
// TODO might want to check for bad data, that we have 2 values
System.out.println(String.format("Key: %-10s Value: %-10s", keyValue[0], keyValue[1]));
}
结果:
Key: id Value: 1234
Key: alert Value: a-b
Key: up Value: 12.3
Key: down Value: 12.3
答案 2 :(得分:0)
您可以使用字符串类中的方法.split()
。
检查出来:
String line = "id:1234 alert:a-b up:12.3 down:12.3";
String []splittedLine = line.split(" ");
for(int i = 0; i <= splittedLine.length;i++){
System.out.println(splittedLine[i]);
}
你在这里做的是在你找到的每个空白字符上分割你的字符串。 这是结果:
id:1234
警报:a-b
上:12.3
下:12.3