2014-02-17 3 views
-2

У меня есть java String объект.Извлечение цифр из строки

Позволяет сказать

String str = "5N7BS is having a number 33 and 55c"; 

Желаемый результат: 33 55

Pattern p = Pattern.compile("[0-9]+"); 
    Matcher m = p.matcher("5N7BS is having a number 33 and 55"); 
    while (m.find()) { 
     System.out.println(m.group()); 
    } 

Приведенный выше код дает 5 7 33 55 в качестве выходного сигнала. Мне нужен только тот вывод, в котором номера сопровождаются алфавитом.
Для примера: выход 55c: - 55
, но для 55c5 или cc5. Я не хочу никаких результатов.

Заранее спасибо :-)

+6

Если вам нужны только цифры, за которыми следуют буквы, почему «33» вывод? – Bohemian

+0

Номера, за которыми следует только одно или любое количество символов? – Smutje

+0

Он означает, что он не хочет чисел, где буквы перед ним, а не сзади, как единица. –

ответ

2

Вы можете использовать границы слов (\\b), чтобы добавить ограничения, которые вы хотите. Это будет соответствовать только числу, если оно сразу после границы, и если за ним следуют только буквы (если они есть) до следующей границы слова.
Обратите внимание, что она использует специальную группу, чтобы поймать номер:

Pattern p = Pattern.compile("\\b([0-9]+)[a-zA-Z]*\\b"); 
Matcher m = p.matcher("5N7BS is having a number 33 and 55c"); 
while (m.find()) { 
    System.out.println(m.group(1)); 
} 
2

Ваш вопрос неясен, но это, кажется, делать то, что вы ищете:

str = str.replaceAll(".*?(\\b(\\d+)[a-z]*\\b|$)", " $2").trim(); 

Вот некоторые тестовый код:

String str = "5N7BS is having a number 33 and 55c2 xyz"; 
str = str.replaceAll(".*?(\\b(\\d+)[a-z]*\\b|$)", " $2").trim(); 
System.out.println(str); 

Выход:

33 
+0

Для str = "5N7BS имеет число 33 и 55c5 xyz", это дает выход 3355c4 xyz. Я хочу, чтобы отдельные числа и числа сопровождались только буквами. – Harki

+0

@Harki хорошо пункт. Я исправил эту проблему. см. отредактированный ответ. – Bohemian

0

Это тоже работает, 1 или более случаев цифр, но без каких-либо алфавитов.

Pattern p = Pattern.compile("([0-9]+[^a-zA-Z])+"); 
0

Это также работает :-)

package com.test; 

import java.util.LinkedList; 
import java.util.List; 

public class NumbersFollowedByAlphabet { 
    public static void main(String[] args) { 
     String s = "5N7BS is having a number 33 and 55c"; 
     char [] ch = s.toCharArray(); 
     int consecutive = 0; 
     List<String> list = new LinkedList<String>(); 
     String consecutiveNumber = ""; 
     for(char c : ch) { 
      if(Character.isDigit(c)) { 
       consecutive++; 
       consecutiveNumber += c; 
      } else if(c == ' ' || Character.isLetter(c)) { 
       if(consecutive >= 2 && c != ' ') { 
        list.add(consecutiveNumber); 
       } 
       consecutive = 0; 
       consecutiveNumber = ""; 
      } 
     } 
     System.out.println(list); 
    } 
} 
0

Вы даже можете использовать более короткую версию:

Pattern p = Pattern.compile("[0-9]+[^\\D]"); 
Смежные вопросы