2010-11-17 166 views
1

有没有一种简单的方法来解析浮点数组的浮点数?我正在编写一个导入程序,需要解析一个ascii文件来获取一些值,我只是想知道是否有一个更简单的方法来做到这一点,然后自己搜索所有空白,并为每个空格分隔值使用Float.parseFloat(s)Java将一串浮点数解析为浮点数组?

例如,字符串是

1 0 4 0 26 110.78649609798859 39 249.34908705094128 47 303.06802752888359

我想创建float数组为:

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

感谢您的帮助!

回答

7

用扫描仪[API]

使用Scanner#hasNextFloatScanner#nextFloat方法循环并获得所有的花车和他们建立成一个阵列。

+0

Jasons的解决方案实际上效率更高,Scanner速度更慢。 – skrat 2011-01-30 21:12:33

4

你可以这样做

分割字符串

的String []分裂(字符串正则表达式) 拆分此字符串各地给定的正 表达式的匹配。

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

正则表达式可以是空格,制表符,逗号什么(优势正则表达式的是,你可以结合你想要的,我在我的XML阅读器使用“[ - +,:;]”); 然后在该环路,并转换为浮动

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

如果你只想浮动的阵列,最简单的方法是分割字符串:

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

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

或者,您可以使用扫描仪或StringTokenizer,将所有值放入列表并在末尾创建一个数组。

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]