Как разделить вводимую пользователем строку на две разные строки? - PullRequest
1 голос
/ 11 июля 2020

Извините за неинформативный заголовок, но я новичок в Java и совершенно не понимаю, как я должен разделить ввод пользователя (строку) на две разные строки.

По сути, то, что я хочу для этого нужно взять пользовательский ввод с двумя одинаковыми числами или буквами, разделенными пробелом, и удалить соответствующие числа или буквы из ArrayList строк.

Примечание: пользовательский ввод может быть одной цифрой или буквой, и метод для этой части должен определять, что пользовательский ввод не является одной буквой или цифрой.

Например, если у меня есть (java) код:

Scanner scan = new Scanner(System.in);
String str = scan.nextLine();

пользователь затем вводит: 5 5 (5 пробелов 5)

и, если у меня есть ArrayList:

Arraylist<String> arrList = new ArrayList<String>;
arrList.add("1");
arrList.add("5");
arrList.add("5");
arrList.add("3");

Как мне удалить две 5 из arrList?

Мой первый подход состоял в том, чтобы разделить строку ввода пользователя на две разные строки, чтобы я мог удалить две строки из ArrayList строк. Поскольку обе цифры или буквы должны быть идентичны друг другу, мне нужно будет сканировать только первое целое число или букву. Однако я не совсем уверен, как написать метод, который сканировал бы первое целое число или букву в строке, состоящей из двух чисел / целых чисел с пробелом между ними.

Я был бы очень признателен за любой Помогите! Спасибо!

Ответы [ 4 ]

2 голосов
/ 11 июля 2020

Просто используйте Collection::removeIf метод:

String number = "5";                           // or an user input
arrList.removeIf(item -> number.equals(item)); // number::equals
0 голосов
/ 12 июля 2020

Согласно вашему объясненному примеру, похоже, что вы хотите удалить только первый экземпляр строкового элемента из ArrayList, иначе вы не захотите предоставлять 5 5, что-то вроде этого:

String ls = System.lineSeparator();
ArrayList<String> arrList = new ArrayList<>();
arrList.add("1");
arrList.add("5");
arrList.add("5");
arrList.add("3");
    
Scanner scan = new Scanner(System.in);
String str = "";
while (str.equals("")) {
    System.out.print("Enter the numerical strings to delete from ArrayList seperated by a whitespace: " + ls
           + "Your Entry: --> ");
    str = scan.nextLine(); 
    if (!str.replaceAll("\\s+", "").matches("\\d+")) {
        System.out.println("Invalid Entry! Entries must be numerical integer type! (" + str + ")" + ls);
        str = "";
    }
}
    
String[] numbers = str.split("\\s+");
// Iterate through all the User Supplied numbers...
for (int i = 0; i < numbers.length; i++) {
    // Remove the first instance (only) of the 
    // current User the supplied number.
    for (int j = 0; j < arrList.size(); j++) {
        if (arrList.get(j).equals(numbers[i])) {
            arrList.remove(j);
            break;
        }
    }
}

// Display the ArrayList when all is done...
System.out.print(String.join(ls, arrList));

Если вы укажете только одну цифру 5, то будут удалены только первые 5 из списка ArrayList.

0 голосов
/ 11 июля 2020

У вас есть как минимум два варианта:

Использовать split ():

String[] numbers = str.split(" ");

Использовать next () вместо nextLine ():

String str1 = scan.next();
String str2 = scan.next();

Если если вы воспользуетесь вторым подходом, вы можете добавить вызов hasNext () для обработки случая, когда есть только одна строка.

0 голосов
/ 11 июля 2020

Вы можете использовать .split() для разделения входов по пробелу

String str = scan.nextLine();
String[] list = str.split(" ");

Затем вы можете удалить входы, используя .remove() из ArrayList

for (int i = 0; i < list.length; i++) {
    arrList.remove(list[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...