/
Вопросы и ответы
/
Java
/

Как массив string перевести в int java

Как массив string перевести в int java

5 лет назад

Человек-Молекула

Ответы

1

Для перевода массива с элементами класса String в массив с элементами типа int следует пройтись в цикле по элементам исходного массива, привести их к типу int с помощью метода parseInt() и сохранить в новый массив. Необходимо помнить, если массив содержит то, что нельзя привести к целому числу, используя метод parseInt(), то будет выброшено исключение NumberFormatException. Например, вещественное число 3.0 или обычная строка Hello.

1
2
// Пример исключения
Exception in thread "main" java.lang.NumberFormatException: For input string: "3.0"

4 года назад

Никита Сысоев

1

Можно преобразование сделать не в цикле, а в стриме :

1
2
int[] numbers = Arrays.stream(strings)
                .mapToInt(Integer::parseInt).toArray ();

4 года назад

Сергей Якимович

0

Каждый элемент переводят в число через Integer.parseInt(). Короче всего это сделать стримом:

1
2
3
4
5
6
7
8
import java.util.Arrays;

String[] strings = {"10", "20", "30"};
int[] numbers = Arrays.stream(strings)
        .mapToInt(Integer::parseInt)
        .toArray();

System.out.println(Arrays.toString(numbers)); // [10, 20, 30]

Через цикл

1
2
3
4
5
6
String[] strings = {"10", "20", "30"};
int[] numbers = new int[strings.length];

for (int i = 0; i < strings.length; i++) {
    numbers[i] = Integer.parseInt(strings[i]);
}

Работает в любой версии Java. Подходит, если нужно обработать ошибку для конкретного элемента.

Строка с числами через пробел

Часто массив строк получают из одной строки ввода:

1
2
3
4
String line = "4 8 15 16 23 42";
int[] numbers = Arrays.stream(line.trim().split("\\s+"))
        .mapToInt(Integer::parseInt)
        .toArray();

\\s+ делит строку по любому количеству пробелов и табов. С split(" ") двойной пробел даст пустую строку, и parseInt упадёт.

Числа через запятую с пробелами: line.split(",\\s*").

Пробелы и пустые строки в массиве

parseInt(" 5") и parseInt("") выбрасывают NumberFormatException. Очистите данные перед преобразованием:

1
2
3
4
5
int[] numbers = Arrays.stream(strings)
        .map(String::trim)
        .filter(s -> !s.isEmpty())
        .mapToInt(Integer::parseInt)
        .toArray();

Если в массиве есть не числа

Пропустить такие элементы:

1
2
3
4
int[] numbers = Arrays.stream(strings)
        .filter(s -> s.matches("-?\\d+"))
        .mapToInt(Integer::parseInt)
        .toArray();

Регулярка не проверяет диапазон int: число из 11 цифр пройдёт фильтр и упадёт в parseInt.

Integer[] или List

Если нужен массив объектов или список:

1
2
3
4
5
6
7
Integer[] boxed = Arrays.stream(strings)
        .map(Integer::valueOf)
        .toArray(Integer[]::new);

List<Integer> list = Arrays.stream(strings)
        .map(Integer::valueOf)
        .toList(); // Java 16+, в старых версиях .collect(Collectors.toList())

Большие числа и дроби

ТипМетод
longmapToLong(Long::parseLong)
doublemapToDouble(Double::parseDouble)

Массивы, циклы и строки разбирают в бесплатном курсе «Основы Java».

11 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845