Reputation: 8551
I encounter some problem when using useDelimiter from the Scanner class.
Scanner sc = new Scanner(System.in).useDelimiter("-");
while(sc.hasNext())
{
System.out.println(sc.next());
}
if I have this input
A-B-C
the output will be
A B
and wait until I type in another "-" for it to print out the last character
However if I instead of having user input data, and insert a String to the Scanner instead the code will work. What's the reason for it, and how do I fix it? I don't want to use StringTokenzier
Upvotes: 2
Views: 19014
Reputation:
How I would do it follows:
Scanner stdin = new Scanner(System.in);
String s = stdin.nextLine();
String[] splitInput = s.split("-", -1);
You will now have an array of Strings
that contain the data between all of the -
s.
Upvotes: 0
Reputation: 138922
If the Scanner
didn't wait for you to enter another -
then it would erroneously assume that you were done typing input.
What I mean is, the Scanner
must wait for you to enter a -
because it has no way to know the length of the next input.
So, if a user wanted to type A-B-CDE
and you stopped to take a sip of coffee at C
, it woud not get the correct input. (You expect [ A, B, CDE ]
but it would get [ A, B, C ]
)
When you pass it in a full String
, Scanner
knows where the end of the input is, and doesn't need to wait for another delimiter.
How I would do it follows:
Scanner stdin = new Scanner(System.in);
String input = stdin.nextLine();
String[] splitInput = input.split("-", -1);
You will now have an array of Strings
that contain the data between all of the -
s.
Here is a link to the String.split()
documentation for your reading pleasure.
Upvotes: 4
Reputation: 68972
You could use an alternative delimiter string useDelimiter( "-|\n" );
It works with a String argument as well as by reading from System.in
.
In case of System.in this requires you to press enter at the end of the line.
Upvotes: 3