@ Klaus говорит:
Не копируйте и вставляйте значение String, в нем может быть скрыт специальный символ.
В этом дело это правда. В вашей строке между 0
и вторым /
есть один непечатаемый символ Unicode U+202C
("\u202C"
как строка Java). Он используется для двунаправленного управления текстом (некоторые языки пишутся справа налево).
Просто поместите курсор в начало скопированного текста, а затем переместите его вправо с помощью курсора и после окончания 0
второго числа вы увидите, что один раз курсор, кажется, не двигается (но на самом деле он движется невидимо). Там вы также можете удалить невидимый символ, исправляя вашу программу.
Обновление: Вот короткая версия, которая работает даже со специальным символом, все еще содержащимся в строке. Он использует .split("[^0-9-+]+")
, чтобы разделить что-либо между целыми числами (плюс / минус для положительных / отрицательных чисел также обрабатываются правильно), а не просто по sla sh (/
).
package de.scrum_master;
import java.math.BigInteger;
import java.util.Arrays;
public class Dummy {
public static void main(String[] args) {
Arrays
.asList("-2739379824/2752586380/2286078538".split("[^0-9-+]+"))
.stream()
.map(BigInteger::new)
.forEach(System.out::println);
}
}
Журнал консоли:
-2739379824
2752586380
2286078538
Я думаю, вы можете взять его отсюда и настроить в соответствии со своими потребностями. Кстати, я согласен с Клаусом, что вы должны убедиться, что ваши входные строки чистые, чем чистить их вручную. Но если ваши строки, например, скопированы с веб-сайта, вам лучше использовать решение, подобное моему, чтобы убедиться, что программа работает должным образом. Никогда не доверяйте данным из внешних источников.