【问题标题】:In Java, how do I parse multiple values of a single field to a String array?在 Java 中,如何将单个字段的多个值解析为字符串数组?
【发布时间】:2012-07-13 15:33:00
【问题描述】:

我有一行纯文本,其中包含一系列由加号分隔的标签:

event name @location +tag1 +tag2 +tag3 +tag4

数据字段总是以相同的顺序出现:名称、位置、标签。名称和位置始终只有一个实例,但可以有一个或多个标签。我希望能够在 Java 中复制 .NET StringSplit 方法(将所有分隔字符串写入数组),但似乎无法解决这个问题。

我希望上面示例中的标记字段的输出是:

tag[0] = tag1
tag[1] = tag2
tag[2] = tag3
tag[3] = tag4

首先,我能找到的最接近的方法是使用正则表达式的split。但我不确定如何将正则表达式编码为从数组中排除任何 before 第一个 + 的字符。

我曾想过在特定行中计算 + 并使用 for 循环来解析和创建 tagString[count-of-plusses],但这样会在一行中遍历多个 +nnnnn 实例吗?

对解决此问题的好方法有什么建议吗?

【问题讨论】:

    标签: java arrays string parsing


    【解决方案1】:

    如果您专门查看 String 的 javadoc:

    public String[] split(String regex)
    

    这将允许您将字符串拆分为您喜欢的任何内容并返回一个字符串数组。

    您也可以将此方法的版本与limit 参数一起使用。首先使用它可以让您摆脱所有东西,然后再不使用limit 参数。

    【讨论】:

      【解决方案2】:

      您可以拆分字符串并复制没有第一项的返回数组:

      String s ="event name @location +tag1 +tag2 +tag3 +
      String[] items = s.split("\\+");
      
      //remove the `event name  @location` part
      String[] tags = new String[items.length - 1];
      System.arraycopy(items, 1, tags, 0, items.length - 1); 
      

      确保添加相关的完整性检查(例如,项目长度 > 1)。

      【讨论】:

        【解决方案3】:

        使用字符串方法 indexOf() 和 subString() 获取字符串的相关部分,即丢弃第一个 + 之前的所有内容。

        然后使用带有 + 作为分隔符的 split() 处理此子字符串,并使用 trim() 丢弃空格。

        【讨论】:

          【解决方案4】:

          如果您不想使用正则表达式,请尝试http://docs.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html

          【讨论】:

            【解决方案5】:

            要删除第一个 + 之前的字符,只需忽略数组中的第一项即可。

                String input = "+tag1+tag2+tag3+tag4";
                String[] splitted = input.split("\\+");     
                System.out.println(Arrays.toString(splitted));
                //returns [, tag1, tag2, tag3, tag4]
            
                input = "xxx+tag1+tag2+tag3+tag4";
                splitted = input.split("\\+");      
                System.out.println(Arrays.toString(splitted));
                //returns [xxx, tag1, tag2, tag3, tag4]
            

            【讨论】:

              【解决方案6】:
              input.split(" +")[1]     // you have "tag1 +tag2 +tag3 +tag4" now
                   .split("\\s+\\+");  // you have {tag1, tag2, tag3, tag4} now
              

              【讨论】:

              • 很难使用该语法添加检查(即,如果原始字符串中没有 " +",您将收到 IndexOutOfBoundsException)。
              【解决方案7】:

              试试这个。

              String string = "event name @location +tag1 +tag2 +tag3 +tag4";                        
              String[] ss = string.split(" ");
              String[] tag = new String[ss.length - 3];
              for (int i = 3 ; i < ss.length; i++) {
                  tag[i-3] = ss[i].replace("+", "");
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-06-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-04-15
                相关资源
                最近更新 更多