#java #arrays #split
#java #массивы #разделение
Вопрос:
У меня есть строка:
"1 2 3 4 5 6 7 8 9"
и я хочу, чтобы она была добавлена в мой массив таким образом, чтобы она стала:
[1,2,3,4,5,6,7,8,9]
Однако, когда я запускаю свой код,
int[] leftValues = new int[9];
for (String w:left.split("\s",0)){
for (int i = 0; i<9; i ){
leftValues[i] = Integer.valueOf(w);
}
}
Мой вывод дает мне :
[9,9,9,9,9,9,9,9,9]
Могу ли я узнать, что я здесь делаю не так?
Ответ №1:
Ваши вложенные циклы сначала присваивают первое целое число всем индексам массива, затем второе целое число, … и, наконец, последнее целое число (9). Поэтому в вашем массиве в конечном итоге содержится только 9 символов.
Вам нужен один цикл:
int i = 0;
for (String w : left.split("\s",0)) {
leftValues[i] = Integer.valueOf(w);
i ;
}
или
int i = 0;
for (String w : left.split("\s",0)) {
leftValues[i ] = Integer.valueOf(w);
}
Комментарии:
1. Кроме того,
0
подразумевается при разделении, поэтому не требуется imo.2. @YassinHajaj Я не уверен, что вы имели в виду под этим комментарием.
3.
split(String)
следует использовать вместо,split(String, int)
поскольку0
это уже значение по умолчанию
Ответ №2:
Вот Java 8 способ сделать это кратко
String numbers = "1 2 3 4 5 6 7 8 9";
int[] integers = Arrays.stream(numbers.split("\s"))
.mapToInt(s -> Integer.parseInt(s))
.toArray();
Комментарии:
1. Есть способы сделать это проще, а также вы выводите
List
не массив2. не понимал, что массив желателен. Решение становится еще проще. Модифицировал решение, по сути, теперь это просто строка решения.
3. Хорошо, вы можете использовать ссылку на метод
Integer::parseInt
для большей краткости4. Речь идет о личном тестировании. Integer::parseInt для некоторых более загадочен, чем s -> Integer.parseInt(), и трудно достичь консенсуса, который был бы более кратким.