Java разбирает строку с плавающей точкой в ​​массив с плавающей точкой? - PullRequest
2 голосов
/ 17 ноября 2010

Есть ли простой способ разобрать строку с плавающей точкой в ​​массив с плавающей точкой? Я пишу импортер, который должен проанализировать файл 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 ]

7 голосов
/ 17 ноября 2010

Используйте сканер [ API ]

Используйте методы Scanner#hasNextFloat и Scanner#nextFloat для циклического прохождения, получения всех чисел с плавающей точкой и построения их в массив.

6 голосов
/ 17 ноября 2010

Вы можете сделать это

Split the String

String [] split (регулярное выражение строки) Разбивает эту строку вокруг совпадений данного регулярного выражение.

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

регулярное выражение может быть пробелом, табуляцией, запятой, чем угодно (преимущество регулярного выражения в том, что вы можете комбинировать все, что хотите, я использую это в своей программе чтения XML "[- +.,:;]"); затем зациклите на этом и конвертируйте в float

for(String s : tabOfFloatString){
    float res = Float.parseFloat(s);
    //do whatever you want with the float
}
2 голосов
/ 17 ноября 2010

Использование java.util.Scanner

1 голос
/ 17 ноября 2010

Вот решение 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,2, 303,06802]

1 голос
/ 17 ноября 2010

Если вы просто хотите получить массив с плавающей точкой, проще всего разбить строку:

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

, а затем выполнить итерацию по массиву строк и проанализировать значения с одиночной плавающей точкой.

В качестве альтернативы, вы можете использовать Scanner или StringTokenizer, поместить все значения в список и создать массив в конце.

...