число из строки в Java - PullRequest
       8

число из строки в Java

7 голосов
/ 04 апреля 2010

У меня есть что-то вроде "ali123hgj". Я хочу, чтобы 123 в целое число. Как я могу сделать это в Java?

Ответы [ 6 ]

11 голосов
/ 04 апреля 2010
int i = Integer.parseInt("blah123yeah4yeah".replaceAll("\\D", ""));
// i == 1234

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

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

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

8 голосов
/ 04 апреля 2010

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

\d+

Автор:

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
}
1 голос
/ 01 октября 2015

Это Google Guava # CharMatcher Way.

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
0 голосов
/ 04 апреля 2010
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]

0 голосов
/ 04 апреля 2010
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 голосов
/ 04 апреля 2010

Возможно, вы могли бы сделать это следующим образом:

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)));
}

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

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