2
    "[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_A17235_B从第二行和第三行中提取类似的其他数字。如您所见,每行的数字都在变化,如果子字符串代码是通用的,我会很棒。你的建议对我有很大帮助。

4

3 回答 3

1
String[] result = string.split("," ,2);

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

于 2013-03-14T13:48:21.127 回答
1

一些正则表达式将为您执行此操作:

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

正则表达式的解释:

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

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

是一篇关于为什么尽可能使用所有格匹配的非常好的文章。

于 2013-03-14T13:51:11.867 回答
0
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
    }
于 2013-03-14T13:48:46.550 回答