как из консоли добавить строку в список по индексу?
есть некий список дел
public class Main {
public static void main(String[] args){
ArrayList<String> todoList = new ArrayList<>(){{
add(0,"Почистить зубы");
add(1,"Сделать зарядку");
add(2,"Выпить стакан воды");
add(3,"Приготовить завтрак");
add(4,"Отправится на работу");
}};
когда к нему добавляю новую строку из консоли, то ввожу ADD и "добавляю дело"
case "ADD":
System.out.println("Добавить дело в список: ");
todoList.add(sc.next());
System.out.println("Дело добавлено!" + "номер в списке: " + todoList.size())
проблема в том, что нужно, чтобы строка добавлялась к списку и по индексу тоже (ADD 4 - "какое-то дело на четвёртом месте"). я понимаю, что это можно сделать через if и разделить строку на слова. и если первое слово - число, то использовать его для добавления в список "по индексу". но не знаю как это реализовать в коде. буду весьма признателен за любую помощь!
Ответы (2 шт):
Можно так. Например пользователь вводит строку 5,Название.
По тексту вы ищите первую запятую в тексте, делается это с помощью метода indexOf(","). Если получили индекс больше нуля - смотрите часть до запятой число или нет. Потом проверяете, если это число отрицательное или больше текущей длины списка добавляете в конец, иначе добавляете по индексу.
String str = sc.next();
int idx = str.indexOf(",");
if( idx > 0 ){
String strNum = str.substring(0, idx);
try{
int num = Integer.parseInt(strNum);
if( num > 0 && num < todoList.size() ){
String val = str.substring(idx + 1, str.length - 1 );
todoList.add( num, val );
} else{
todoList.add( val );
}
} catch(Exception e){
todoList.add( str );
}
}else{
todoList.add( str );
}
Если пользователь введет -1, то элемент вставится просто в конец
int num, flag;
String text = sc.next();
flag = text.indexOf(',');
try {
num = Integer.parseInt(text.substring(0, flag));
} catch(NumberFormatException nfe) {
num = -1;
}
if (num >= 0) {
todoList.add(num, text.substring(flag + 1)); // +1 так как после запятой пробел
}
if (num < 0 && flag >= 0) {
todoList.add(text.substring(flag + 1));
}
if (num < 0 && flag < 0) {
todoList.add(text);
}
Вроде все, будут вопросы по коду - задавайте.