2015-06-01 5 views
0

У меня есть несколько строк текста, такие как:Извлечение целых чисел из строки текста в Java

"you current have 194764bleh notifications" 
"you current have 32545444bleh notifications" 
"you current have 8132bleh notifications" 
"you current have 93bleh notifications" 

Что лучший способ, чтобы получить целые числа из текста?

В настоящее время используется line.split дважды, один раз для «иметь», а затем один раз для «bleh».
Кажется, действительно неэффективно это делать, чтобы получить целые числа.

Есть ли лучшие способы сделать это?

+0

Это прекрасно (IMHO), разделение подстрокой выполняется быстрее, чем при использовании регулярного выражения. – alfasin

+0

@alfasin Для какого-то бесполезного определения «быстрее». Регулярное выражение является более понятным и более удобным для этой конкретной специальной задачи. Несколько «потерянных» циклов процессора не имеют значения; микро-тесты не должны применяться. – user2864740

+1

У этого уже есть решение здесь http://stackoverflow.com/questions/4030928/extract-digits-from-a-string-in-java – aa1992

ответ

2

E.g.

String str = "you current have 194764bleh notifications"; 
str = str.replaceAll("\\D", ""); // Replace all non-digits 

Использование регулярных выражений, чтобы забрать все нецифровые будет вариант,
это также не ограничивает вас к тому, «иметь» & «BLEH» завернуть номера.

Не совсем уверен в эффективности по сравнению с использованием раскола.

+0

Эффективность, вероятно, не имеет значения (это будет быстро). Он меняет семантику, так что он будет принимать «Hello 12 World 34», но это было отмечено - если эти релаксации в порядке, я бы использовал нечто подобное. – user2864740

0

Вы можете получить подстроку сверху строки, а затем преобразовать ее в int.

String strVal1 = line2.substring(17, line2.indexOf("bleh")); 
int intVal1 = Integer.parseInt(strVal1); 

Я рассмотрел формат строки, будет таким же. Если нет, вы можете изменить начальный индекс на индекс «have».

0

Недавно я хотел бы использовать регулярное выражение, чтобы извлечь то, что мне нужно в строке. Поэтому я хотел бы использовать метод, как показано ниже:

String a = "you current have 194764bleh notifications"; 

Pattern numPattern = Pattern.compile("(\\d+)"); 
Matcher theMather = numPattern.matcher(a); 
if(theMather.find()) 
{ 
    System.out.println(theMather.group(1)); 
} 

Я проверил код. Желание это полезно.

Смежные вопросы