【问题标题】:Best way to select parts certain parts of data in a string that changes in size在大小发生变化的字符串中选择部分数据的某些部分的最佳方法
【发布时间】:2014-03-28 15:41:41
【问题描述】:

我正在寻找一种很好的方法来解析大小变化的字符串中的某些信息。

例如,字符串可能是

“id:1234 警报:a-b 上:12.3 下:12.3”

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

“id:123456 警报:a-b-c-d 向上:12.345 向下:12.345”

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

选择所需的每个值的明智方法是什么?希望我已经很好地解释了这一点,因为我通常倾向于用我的错误解释来混淆人们。我正在用 Java 编程。

【问题讨论】:

  • 您需要更好地描述您在字符串中搜索的内容。您是否一直在寻找<word>: <value>?其中<word><value> 不包含空格?作为旁注,您无需使用<br>s 来回答您的问题。这就是 ENTER 键的用途。
  • @brookman 如果<word>:<value> 对不包含任何空格,您可以先使用空格分隔,然后为每个<word>:<value> 对使用冒号(:)。

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


【解决方案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】:

    基于正则表达式的基本解决方案可能如下所示:

    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
    

    【讨论】:

      【解决方案3】:

      您可以使用 String 类中的方法 .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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-28
        • 1970-01-01
        • 2011-04-02
        • 2020-11-25
        相关资源
        最近更新 更多