Повышение универсальности разбора - Java - PullRequest
1 голос
/ 01 апреля 2011

Я разрабатываю программу, которая берет .txt, извлекает из него числа и помещает их в массив для дальнейшего анализа. Вот что у меня есть, где строка - это строка, которая входит в

stringArray = line.split(" ");

                doubleArray = new double[stringArray.length];
                    for(int i=0; i<stringArray.length; i++)
                        {
                           doubleArray[i] = Double.parseDouble(stringArray[i]);
                        }

Это работает, если строка имеет вид "6.5 8 2 4.3 1 67". Однако я пытаюсь заставить его отфильтровывать запятые, множественные пробелы и другие буквы. Я думаю, что это просто связано с изменением части .split, но я не уверен, как.

Есть идеи?

Ответы [ 4 ]

0 голосов
/ 01 апреля 2011

Используйте Сканер , чтобы сделать работу за вас.

import java.util.Scanner;

Scanner s = new Scanner(myInputString);
s.useDelimiter(",");
List<Double> doubles = new ArrayList<Double>();
while( s.hasNextDouble() ) {
    doubles.add(s.nextDouble())
}

Вы можете настроить то, что передается, чтобы использовать Delimiter для соответствия вашим потребностям.

0 голосов
/ 01 апреля 2011

Используйте класс Apache commons lang StringUtil .Проверьте метод разделения.

0 голосов
/ 01 апреля 2011

Например:

stringArray = line.split("[^0-9.+Ee-]+");

будет разбиваться на любой набор символов, который не является 0,1,2,3,4,5,6,7,8,9, '.', '+ ',' E ',' e 'или' - '- все символы, которые могут появляться в двойном числе.

0 голосов
/ 01 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...