Java如何将一串浮点数解析为浮点数数组?

3
有没有一种简单的方法将一串浮点数解析为浮点数数组?我正在编写一个导入器,需要解析一个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个回答

8
你可以这样做:
分割字符串
使用以下方法可以将字符串根据给定的正则表达式拆分:
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
}

7

使用扫描器 [API]。

使用Scanner#hasNextFloatScanner#nextFloat方法循环获取所有浮点数,并将它们构建成数组。


Jason的解决方案实际上更高效,Scanner明显较慢。 - skrat

2

1
如果你只想要一个浮点数数组,简单的方法是将字符串分割:
String[] flostr = myString.split(" ");
float[] floats = new float[flostr.length];

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

另外,您可以使用Scanner或StringTokenizer,将所有值放入List中,并在最后创建一个数组。


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]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接