Разобрать несколько двойных строк - PullRequest
2 голосов
/ 21 февраля 2012

Я хотел бы знать, как анализировать несколько двойных чисел из строки, но строку можно смешивать, например: String s = "text 3.454 sometext5.567568more_text".

Стандартный метод (Double.parseDouble) не подходит.Я пытался разобрать его с помощью метода isDigit, но как проанализировать другие символы и .?

спасибо.

Ответы [ 4 ]

7 голосов
/ 21 февраля 2012

Вы можете найти следующее регулярное выражение :

Pattern.compile("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")

, а затем использовать Double.parseDouble() в каждом совпадении.

3 голосов
/ 21 февраля 2012

После анализа парных чисел с помощью подходящих регулярных выражений, как в этом коде или в других публикациях, выполните итерацию, чтобы добавить подходящие выражения в список.Здесь у вас есть myDoubles готовый для использования в любом другом месте вашего кода.

public static void main ( String args[] )
{
    String input = "text 3.454 sometext5.567568more_text";
    ArrayList < Double > myDoubles = new ArrayList < Double >();
    Matcher matcher = Pattern.compile( "[-+]?\\d*\\.?\\d+([eE][-+]?\\d+)?" ).matcher( input );

    while ( matcher.find() )
    {
        double element = Double.parseDouble( matcher.group() );
        myDoubles.add( element );
    }

    for ( double element: myDoubles )
        System.out.println( element );
}
1 голос
/ 21 февраля 2012
  1. Разобрать подстроку (окруженную пробелами)

  2. Используйте String.ParseDouble (), чтобы получить числовое значение

Вот один пример, использующий «split ()» для разбора (есть много альтернатив):

// http://pages.cs.wisc.edu/~hasti/cs302/examples/Parsing/parseString.html

String phrase = "the music made   it   hard      to        concentrate";
String delims = "[ ]+";
String[] tokens = phrase.split(delims);

Вот второй вариант:

Java: как разобрать double из регулярных выражений

0 голосов
/ 21 февраля 2012

Вам нужно подумать о том, какой алгоритм вы бы хотели использовать для этого, поскольку это не совсем очевидно. Если подстрока имеет значение asdf.1asdf, должно ли это быть проанализировано как десятичное значение 0.1 или просто 1?

Кроме того, могут ли некоторые из встроенных чисел быть отрицательными? Если нет, то это значительно упрощает пространство поиска.

Я думаю, что aix находится на правильном пути с использованием регулярных выражений, поскольку, как только вы придумаете алгоритм, это будет похоже на работу конечного автомата (просматривайте ввод, пока не найдете цифра или (необязательно) - или ., затем найдите следующий «недопустимый» символ и проанализируйте подстроку в обычном режиме).

Это крайние случаи, о которых вам следует подумать - например, без отрицательных чисел вы можете почти использовать s.split("[^0-9.]") и отфильтровывать непустые элементы. Тем не менее, символы периода, которые не являются частью числа, получат вас. Какое бы решение вы ни выбрали, подумайте о том, могут ли какие-то ситуации привести его в порядок.

...