views:

82

answers:

2

How would you parse the values in a string, such as the one below?

12:40:11  8    5                  87

The gap between numbers varies, and the first value is a time. The following regular expression does not separate the time component:

str.split("\\w.([:]).")

Any suggestions?

+8  A: 

The regex \s+ matches one or more whitespaces, so it will split into 4 values:

"12:40:11", "8", "5", "87"

As a Java string literal, this pattern is "\\s+".

If you want to get all 6 numbers, then you also want to split on :, so the pattern is \s+|:. As a Java string literal this is "\\s+|:".

References


On Scanner

Instead of using String.split, you can also use java.util.Scanner, and useDelimiter the same as what you'd use to split. The advantage is that it has int nextInt() that you can use to extract the numbers as int (if that's indeed what you're interested in).

Related questions

polygenelubricants
Yes, this is correct, "\\s+" works for me. Thank you very much!
goutham
+2  A: 

See the Pattern doc and String API.

Using

str.split("\\s+");

will yield

[ '12:40:11', '8', '5', '87' ]

or

str.split("\\s+|:");

should yield

[ '12', '40', '11', '8', '5', '87' ]
Stephen
Thanks, "\\s+" works.
goutham