2010-04-04 6 views
7

У меня есть что-то вроде «ali123hgj». Я хочу иметь 123 в целых числах. как я могу сделать это в java?номер из строки в java

+4

Как насчет '' abc123def567ghi '' или '' abcdef "'? – kennytm

+1

У вас всегда есть 3 символа перед номером, или это просто пример? – lbedogni

+0

Это не только три символа .it - ​​это номер от 0 до более символов. это могут быть «123», «sdfs», «123fdhf», «fgdkjhgf123», –

ответ

8

Используйте следующую RegExp (см http://java.sun.com/docs/books/tutorial/essential/regex/):

\d+ 

By:

final Pattern pattern = Pattern.compile("\\d+"); // the regex 
final Matcher matcher = pattern.matcher("ali123hgj"); // your string 

final ArrayList<Integer> ints = new ArrayList<Integer>(); // results 

while (matcher.find()) { // for each match 
    ints.add(Integer.parseInt(matcher.group())); // convert to int 
} 
11
int i = Integer.parseInt("blah123yeah4yeah".replaceAll("\\D", "")); 
// i == 1234 

Обратите внимание, как это будет "сливать" цифры из разных частей строк вместе в один номер , Если у вас есть только один номер, это все равно работает. Если вы хотите только первый номер, то вы можете сделать что-то вроде этого:

int i = Integer.parseInt("x-42x100x".replaceAll("^\\D*?(-?\\d+).*$", "$1")); 
// i == -42 

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

0

Вы могли бы это сделать вдоль этих линий:

Pattern pattern = Pattern.compile("[^0-9]*([0-9]*)[^0-9]*"); 
Matcher matcher = pattern.matcher("ali123hgj"); 
boolean matchFound = matcher.find(); 
if (matchFound) { 
    System.out.println(Integer.parseInt(matcher.group(0))); 
} 

Это легко адаптируются к многократному номер группы, а также. Код предназначен только для ориентации: он не был протестирован.

0
int index = -1; 
for (int i = 0; i < str.length(); i++) { 
    if (Character.isDigit(str.charAt(i)) { 
     index = i; // found a digit 
     break; 
    } 
} 
if (index >= 0) { 
    int value = String.parseInt(str.substring(index)); // parseInt ignores anything after the number 
} else { 
    // doesn't contain int... 
} 
0
public static final List<Integer> scanIntegers2(final String source) { 
    final ArrayList<Integer> result = new ArrayList<Integer>(); 
    // in real life define this as a static member of the class. 
    // defining integers -123, 12 etc as matches. 
    final Pattern integerPattern = Pattern.compile("(\\-?\\d+)"); 
    final Matcher matched = integerPattern.matcher(source); 
    while (matched.find()) { 
    result.add(Integer.valueOf(matched.group())); 
    } 
    return result; 

Входной "asg123d ddhd-2222-33sds --- --- 222 сс --- 33dd 234" результаты в этом выводе [123, -2222, -33, -222, - 33, 234]

1

Это путь Google Guava #CharMatcher.

String alphanumeric = "12ABC34def"; 

String digits = CharMatcher.JAVA_DIGIT.retainFrom(alphanumeric); // 1234 

String letters = CharMatcher.JAVA_LETTER.retainFrom(alphanumeric); // ABCdef 

Если вас интересует только, чтобы соответствовать ASCII цифр, используйте

String digits = CharMatcher.inRange('0', '9').retainFrom(alphanumeric); // 1234 

Если вы только заботиться, чтобы соответствовать буквы латинского алфавита, используйте

String letters = CharMatcher.inRange('a', 'z') 
         .or(inRange('A', 'Z')).retainFrom(alphanumeric); // ABCdef 
Смежные вопросы