Java将浮点字符串解析为float数组?

时间:2010-11-17 08:37:43

标签: java arrays string parsing floating-point

是否有一种简单的方法可以将一串浮点数解析为浮点数组?我正在编写一个导入器,需要解析一个ascii文件以获取一些值,我只是想知道是否有更简单的方法来执行此操作然后自己搜索所有空白并为每个空格使用Float.parseFloat(s) - 分开的价值。

例如,字符串是

1 0 4 0 26 110.78649609798859 39 249.34908705094128 47 303.06802752888359

我想创建一个浮点数组:

[1, 0, 4, 0, 26, 110.78649609798859, 39, 249.34908705094128, 47, 303.06802752888359]

感谢您的帮助!

5 个答案:

答案 0 :(得分:7)

使用扫描仪[API]

使用Scanner#hasNextFloatScanner#nextFloat方法遍历并获取所有浮点数并将其构建为数组。

答案 1 :(得分:6)

你可以这样做

拆分字符串

  

String [] split(String regex)             将此字符串拆分为给定常规的匹配项   表达

String[] tabOfFloatString = bigStringWithAllFloats.split(regex);

正则表达式可以是空格,制表符,逗号等等(正则表达式的优点是你可以组合所有你想要的,我在我的xml阅读器中使用它“[ - +。,:;]”); 然后循环并转换为浮点数

for(String s : tabOfFloatString){
    float res = Float.parseFloat(s);
    //do whatever you want with the float
}

答案 2 :(得分:2)

答案 3 :(得分:1)

如果你只想要一个float数组,那么简单的方法就是分割字符串:

String[] flostr = myString.split(" ");
float[] floats = new float[flostr.length];

然后迭代字符串数组,并解析单个浮点值。

或者,您可以使用Scanner或StringTokenizer,将所有值放入List并在末尾创建数组。

答案 4 :(得分:1)

这是一个Guava解决方案,但我很惊讶它显然需要多么复杂。也许有人可以给我一个如何缩短它的提示:

public static float[] extractFloats(final String input){
    // check for null Strings
    Preconditions.checkNotNull(input);
    return Floats.toArray(Lists.transform(
        Lists.newArrayList(Splitter.on(Pattern.compile("\\s+")).split(
            input.trim())), new Function<String, Float>(){

            @Override
            public Float apply(final String input){
                return Float.valueOf(input);
            }
        }));
}

测试代码:

String param =
    "1 0 4 0 26 110.78649609798859 39 249.34908705094128 47 303.06802752888359";
float[] floats = extractFloats(param);
System.out.println(Arrays.toString(floats));

<强>输出:

  

[1.0,0.0,4.0,0.0,26.0,110.7865,39.0,249.34909,47.0,303.06802]