Каков наилучший способ извлечь этот int из строки в Java? - PullRequest
2 голосов
/ 07 февраля 2012

Вот примеры некоторых входных данных, которые мне могут дать

1,4
34,2
-99,20

и т.д.

Поэтому включены отрицательные значения и возможны цифры 1, 2, 3 и т. Д. Запятые не единственные разделители, просто пример. Но нецелые значения являются причиной parseInt не будет работать. Что я могу кодировать, что позволит мне проанализировать 3 вышеуказанных ввода, чтобы я получил это?

1
34
-99

Ответы [ 6 ]

3 голосов
/ 07 февраля 2012

Вы можете использовать регулярные выражения (регулярные выражения).

Простой пример разбиения запятыми:

String[] values = string.split(",")
for (String a : values) {
    Integer.parseInt(a);
}
2 голосов
/ 07 февраля 2012

Используйте этот код:

String str = "1,4 34,2 -99,20";
String[] arr = str.split("\\D+(?<![+-])");
for (int i=0; i<arr.length; i+=2)
    System.out.println(Integer.parseInt(arr[i]));

ВЫВОД:

1
34
-99
1 голос
/ 07 февраля 2012

Если вы хотите, чтобы ввод был действительным только при наличии разделителя, используйте вместо него "([\\-0-9]*)[,]+.*".

Если вы хотите добавить дополнительные разделители, например, :, добавьте в набор разделителей, например "([\\-0-9]*)[,|:]+.*"

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
   public static void main(String args[]) {
        try {
            String s1 = "-99,20";
            System.out.println(getNumber(s1));

            s1 = "1,4";
            System.out.println(getNumber(s1));
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static int getNumber(String s1) throws Exception {
        Pattern pattern = Pattern.compile("([\\-0-9]*)[,]*.*");
        Matcher m = pattern.matcher(s1);
        if(m.find()) {
            return Integer.parseInt(m.group(1));
        } 

        throw new Exception("Not valid input");
    }
}
1 голос
/ 07 февраля 2012

Если вы используете только запятые, вы можете сделать

String numbers = "1,34,-99";
String[] splitNums = numbers.split(",");
int[] ints = null;
for(int i = 0; i < splitNums.length(); i++) 
{
    ints[i] = Integer.valueOf(splitNums[i]);
}
1 голос
/ 07 февраля 2012

Вы можете заменить все символы, кроме цифр, на пустую строку, а затем выполнить parseInt

String intStr = inputStr.replaceAll("[^0-9]+","");
int i = Integer.parseInt(intStr);
1 голос
/ 07 февраля 2012

Это очень открытый вопрос ... Я предлагаю сначала пройтись по своей строке и отформатировать все числа, правильно подставляя все запятые для точек ... Затем вам нужно разделить ее, а затем вам нужно разбирать каждое значение.

Для каждого шага вы можете найти много помощи по поиску.

т.

  • Шаг 1. Подстановка строк java
  • Шаг 2. Разделение строк Java
  • Шаг 3. Строка в int java
...