K&B Study Guide for Java 5 p498 Selftest problem 1
Joined: Jun 17, 2009
And the command line:
java Regex2 "\d*" ab34ef
What is the result?
G. Compilation fails.
® 3 E is correct. The \d is looking for digits. The * is a quantifier that looks for 0 to many
occurrences of the pattern that precedes it. Because we specified *, the group() method
returns empty Strings until consecutive digits are found, so the only time group() returns
a value is when it returns 34 when the matcher finds digits starting in position 2. The
start() method returns the starting position of the previous match because, again,
we said find 0 to many occurrences.
®˚ A, B, C, D, E, F, and G are incorrect based on the above.
QUESTION: The indexes in the pattern.matcher() string vary from 0 to 5.
How can the answer be E. 01234456 ?
Shouldn't the answer be the following: 0123445 ?
Joined: Jun 17, 2009
I tried coding the problem and running it with the specified command line.
I got the following : 01234456
I tried running a different command line : java Regex2 "\w*" ab34ef
I got the following : 0ab34ef6
the m.start() method prints 0 and the m.group() method prints ab34ef. After ab34ef are consumed, m.start() prints 6 for the linefeed and m.group() prints the empty string.
It looks as if the matcher() is including the linefeed at the end of the character string.
I have another related question. In C++, all "strings" are terminated with a '\0' null character. This char is eight bits, and it consists of eight binary zeros 00000000b. Is it possible that Java does the same thing with String objects? Is it possible that the Matcher.find() method looks at the final null character of the string "ab34ef" ?
Thanks for the citation, by the way. But this quote doesn't explain what's happening. Why does the find() method check the index following the last character ? The find() method has to be looking at something in order to find nothing.
Because a match of zero length is possible, the find() method will check the index following the last character of input.