Echidna
Echidna

Reputation: 164

How to separate a string user input into two different strings?

Sorry for the uninformative title, but I'm new to Java and am quite confused about how I should separate a user input (a string) into two different strings.

Essentially, what I want to do is take a user input with two of the same numbers or letters separated by a space, and remove the corresponding numbers or letters from an ArrayList of strings.

Note: the user input can be a single number or letter, and the method for this part must identify that the user input is not a single letter or number.

For example, if I have the (java) code:

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

the user then input:5 5 (5 space 5)

and if I have an ArrayList:

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

How do I remove the two 5's from arrList?

My first approach was to separate the user input string into two different strings so that I could remove the two strings from the ArrayList of strings. Since both numbers or letters should be identical to each other, I would only need to scan the first integer or letter. However, I'm not quite sure how to write a method that would scan the first integer or letter in a string that consist of two numbers/integers with a space between them.

I would be much appreciated for any help! Thanks!

Upvotes: 1

Views: 1701

Answers (4)

Nikolas
Nikolas

Reputation: 44368

Simply use Collection::removeIf method:

String number = "5";                           // or an user input
arrList.removeIf(item -> number.equals(item)); // number::equals

Upvotes: 3

DevilsHnd - 退した
DevilsHnd - 退した

Reputation: 9192

According to your explained example, it looks like you only want to remove the first instance of a string item from the ArrayList otherwise you wouldn't want to supply 5 5, something like this:

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));

If you supply only one 5 then only the first 5 encountered within the ArrayList is removed.

Upvotes: 1

Brian McCutchon
Brian McCutchon

Reputation: 8584

You have at least two options:

Use split():

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

Use next() instead of nextLine():

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

If you take the latter approach, you might add a hasNext() call to handle the case where there's only one string.

Upvotes: 1

Eklavya
Eklavya

Reputation: 18410

You can use .split() to split the inputs by space

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

Then you can remove inputs using .remove() from ArrayList

for (int i = 0; i < list.length; i++) {
    arrList.remove(list[i]);
}

Upvotes: 1

Related Questions