在字符串中选择部分数据的最佳方法,其大小会发生变化

时间:2014-03-28 15:41:42

标签: java string xml-parsing substring string-parsing

我正在寻找一种解析字符串中信息某些部分的好方法。

例如,字符串可能是

  

“id:1234警告:a-b up:12.3 down:12.3”

我需要选择idalertupdown的值,所以我最初的想法是子串,但后来我想到了字符串的长度可以改变大小,例如

  

“id:123456警告:a-b-c-d up:12.345 down:12.345”

因此,每次使用子字符串查看字符3到7可能每次都不起作用,因为它不会捕获所需的所有数据。

选择所需的每个值的智能方法是什么?希望我能很好地解释这一点,因为我通常倾向于将人们与我的错误解释混为一谈。我用Java编程。

3 个答案:

答案 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