【问题标题】:extracting 2 words from string at the same time in java在java中同时从字符串中提取2个单词
【发布时间】:2013-03-02 21:44:36
【问题描述】:
    "[17235_A, 17235_B, -1.0, 0.06838527, 1.0]"   
    "[17235_C, 17235_D, -1.0, 0.06838527, 1.0]"
    "[17235_E, 17235_F, -1.0, 0.06838527, 1.0]"

我有一堆如上所述的字符串,我想从第一行中提取数字17235_A、17235_B,并从第二行和第三行中提取类似的其他数字。如您所见,每行的数字都在变化,如果子字符串代码是通用的,我会很棒。您的建议对我有很大帮助。

【问题讨论】:

  • 一种方法是使用正则表达式。
  • 那些String 是固定长度和格式的吗?你试过subString、indexOf吗?

标签: java substring indexof


【解决方案1】:
String[] result = string.split("," ,2);

result[0] 和 result[1] 将是您需要的两个子字符串。

【讨论】:

    【解决方案2】:

    一些正则表达式将为您完成此操作:

    public static void main(String[] args) {
        final String[] myStrings = new String[] {"[17235_A, 17235_B, -1.0, 0.06838527, 1.0]", "[17235_C, 17235_D, -1.0, 0.06838527, 1.0]", "[17235_E, 17235_F, -1.0, 0.06838527, 1.0]"};
        final Pattern pattern = Pattern.compile("^\\[([^,]++),\\s*+([^,]++).*+$");
        for(final String string : myStrings) {
            final Matcher matcher = pattern.matcher(string);
            if(matcher.matches()) {
                System.out.println(matcher.group(1));
                System.out.println(matcher.group(2));
                System.out.println("Done");
            }
        }        
    }
    

    输出:

    17235_A
    17235_B
    Done
    17235_C
    17235_D
    Done
    17235_E
    17235_F
    Done
    

    正则表达式的解释:

    • ^ 匹配字符串的开头
    • \\[ 匹配开头的“[”(双转义)
    • ([^,]++) 将内容匹配到第一个逗号,这更多的是优化而不是必要
    • ,\\s*+ 然后匹配一个逗号,后跟任意数量的空格(同样可能)
    • ([^,]++) 将内容匹配到下一个逗号
    • .*$ 匹配到行尾的内容(同样可能)

    两个匹配组现在包含所需的Strings。

    This 是一篇非常好的文章,介绍了为什么尽可能使用所有格匹配。

    【讨论】:

      【解决方案3】:
      public static void main(String[] args) {
              String str = "[17235_A, 17235_B, -1.0, 0.06838527, 1.0]";
      
              String[] strArray = str.split(", ");
      
              System.out.println(strArray[0].substring(1)); //first number
              System.out.println(strArray[1]); //second number
          }
      

      【讨论】:

      • 谢谢你成功了。因为我需要所有 17235_A 所以我没有从 strArray[0] 索引中减去 1。
      • 用于减去“[”符号:)
      猜你喜欢
      • 2016-12-27
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      • 2015-05-08
      相关资源
      最近更新 更多