Самый быстрый способ найти местоположение первого целого числа в строке - PullRequest
0 голосов
/ 08 октября 2019

Я читаю строки из текстового файла, который выглядит следующим образом:

 ;Nonsense/sec;0.17;0;0.13;0.05;0.07;0.2;0.1;0.12;0.1;0.05;
 ;Foo/bar;0.17;0;0.13;0.05;0.07;0.2;0.1;0.12;0.1;0.05;
 ;Coding errors;0;0;0;0;0;0;0;0;0;0;

Что мне нужно сделать, это найти местоположение первого числа в любой данной строке, чтобы я мог сделать что-то вродеэто:

 line = line.substring(firstIntegerLocation, line.length())

Вместо жесткого кодирования начального местоположения, например, так:

 line = line.substring(10, line.length()-2)

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

Я должен использовать Java 7, а не 8, поэтому любое решение должно быть старым :) Мне нужен простой метод, которому я могу передать строку, тогда он вернет местоположение первого целого числа. Я ищу самый быстрый способ сделать это, так как у меня много строк для обработки, и опять же с Java 7, а не 8. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 08 октября 2019

используйте регулярное выражение:

def line = ';Nonsense/sec;0.17;0;0.13;0.05;0.07;0.2;0.1;0.12;0.1;0.05;'
line = line.replaceAll( /^\D*/, '' )

это заменяет все нецифровые символы \D* в начале строки ^ пустой строкой.


однако если выЕсли работать с числами позже, есть способ получить массив чисел:

def line = ';Nonsense/sec;0.17;0;0.13;0.05;0.07;0.2;0.1;0.12;0.1;0.05;'
def nums = line.findAll(/(\d+(\.\d+)?)/).collect{it as BigDecimal}

возвращает:

[0.17, 0, 0.13, 0.05, 0.07, 0.2, 0.1, 0.12, 0.1, 0.05]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...