Разделение строки с большим отрицательным числом и помещение ее в LinkedList

#java #string #parsing #integer

#java #строка #синтаксический анализ #целое число

Вопрос:

Это мой метод, но я получаю исключение NumberFormatException для ввода «-«, когда я пытаюсь запустить его для отрицательного числа.

 public newObj(String s)
{
    list = new LinkedList<Integer>();
    String[] splitted = s.split("\d");

    int[] ints = new int[splitted.length];

    for (int i = 0; i < splitted.length - 1; i  ) {
        ints[i] = Integer.parseInt(splitted[i]);
    }

    for (int j = 0; j < ints.length - 1; j  ) {
        list.add(ints[j]);
    }

}
 

Моя входная строка — это просто число типа «-123456» или «12345». Положительные числа работают, но я не могу заставить работать отрицательные.

Для моей отрицательной входной строки я хочу, чтобы мой список был чем-то вроде [-1,-2,-3,-4,-5,-6].

Комментарии:

1. (согласно Ren8888) «Какова ваша входная строка?»

Ответ №1:

он разделит число на числовой шаблон, поэтому, если у вас есть -123

Например:

 String str = "-123";
System.out.println(Arrays.toString(str.split("\d")));
 

вывод

 [-]
 

и - не может быть проанализирован на int

из комментариев:

для ввода, например -123456 , op хочет сделать его положительным числом

Вы можете сделать это с помощью

 Math.abs(Integer.parseInt(inputString))
 

пусть он проанализирует отрицательное число, а затем вы сможете получить его абсолютное значение, используя Math.abs()

далее из комментариев

op хочет разделить каждую цифру и применить знак, вы можете сделать что-то вроде

     String str = "-123";
    int numbers[] = null;
    int characterIndex = 0;
    boolean isNegative = false;

    if (str.trim().startsWith("-")) {
        characterIndex = 1;
        isNegative = true;
        numbers = new int[str.length() - 1];
    } else {
        numbers = new int[str.length()];

    }

    for (int numIndex = 0; characterIndex < str.length(); characterIndex  , numIndex  ) {
        numbers[numIndex] = Integer.parseInt(str.substring(characterIndex, characterIndex   1));
        if (isNegative) {
            numbers[numIndex] = -1 * numbers[numIndex];
        }

    }
    System.out.println(Arrays.toString(numbers));
 

Примечание: обработка ошибок остается за вами

Комментарии:

1. Могу ли я просто пропустить «-«, а затем умножить каждое число на -1, когда добавлю его в список?

2. как выглядит ваш образец входной строки?

3. Примером будет «-123456», но мне также пришлось бы обрабатывать положительные значения, такие как «123456»

4. Извините, я не имел в виду, что хочу обратить это в позитив. Я имел в виду, что входная строка может быть либо положительной, либо отрицательной. На данный момент мой код работает для положительных чисел, но я не могу заставить его работать для отрицательных. Я думаю, что у меня есть решение моей проблемы, но я просто не знаю способа проанализировать и разделить строку, которая является отрицательным числом, на отдельные отрицательные целые числа.

5.Вы можете просто проанализировать отрицательное число таким же образом, например Integer.parseInt("-123") , вернется к int -123