从字符串中提取浮点值

时间:2013-02-19 13:59:12

标签: java arrays

我有一个很长的字符串,如"abc_12.23;dcf_23.99;dfa_12.99;等等。

现在我需要创建一个将float和string值分别分隔成float和string数组。

我尝试将它们拆分为“;”并将其放入一个数组中,然后对“_”进行拆分并将其提取到一个数组中。但它没有用。谁能帮帮我呢?

5 个答案:

答案 0 :(得分:2)

可以说,使用StringTokenizer可能会更有效率

    StringTokenizer st = new StringTokenizer("abc_12.23;dcf_23.99;dfa_12.99", "_;");
    int n = st.countTokens();
    String[] sa = new String[n / 2];
    float[] fa = new float[n / 2];
    for(int i = 0 ; st.hasMoreTokens(); i++) {
        sa[i] = st.nextToken();
        fa[i] = Float.parseFloat(st.nextToken());
    }

答案 1 :(得分:0)

你解决方案很好。

Followig方法稍微提高了性能:

  • 将所有字符迭代成字符串。
  • 找到“_”或“;”时从最后一个char复制子串(如果 当前解析是浮点数,它比解析的是字符串)并推入 适当的阵列。

不确定您的表现会有所提升。

注意:我不是java pro,但是如果java允许溢出几个字符只是用“;”分隔和“_”并使用奇数索引表示浮点数,而不是奇数表示字符串。

答案 2 :(得分:0)

这是一个正则表达式解决方案:

    String input = "abc_12.23;dcf_23.99;dfa_12.99; and so on";
    String regex = "([a-zA-Z]+)_(\\d+(\\.\\d+)?);?";
    List<String> strings = new ArrayList<>();
    List<Double> floats = new ArrayList<>();
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input);
    while (matcher.find()) {
        strings.add(matcher.group(1));
        floats.add(Double.valueOf(matcher.group(2)));
    }
    System.out.println(strings); // prints [abc, dcf, dfa]
    System.out.println(floats); // prints [12.23, 23.99, 12.99]

答案 3 :(得分:0)

试试这个正则表达式:

(\w.)_(\d.\.\d.);

在此处测试A Regular Expression Test Applet

使用matcher.find()逐步完成匹配。

第3组(索引2)将具有浮点值。

答案 4 :(得分:0)

您可以使用扫描仪。它看起来像这样:

scanner = Scanner("abc_12.23;dcf_23.99;dfa_12.99;");
scanner.useDelimiter("[;_]");
while(scanner.hasNext()){
  String s = scanner.next();
  float f = scanner.nextFloat();
}