Hi Everyone,
Following is one question from K&B
SCJP 5 book.
I don't understand how this e answer is correct.
Given:
import java.util.regex.*;
class Regex2 {
public static void main(
String[] args) {
Pattern p = Pattern.compile(args[0]);
Matcher m = p.matcher(args[1]);
boolean b = false;
while(b = m.find()) {
System.out.print(m.start() + m.group());
}
}
}
And the command line:
java Regex2 "\d*" ab34ef
What is the result?
A. 234
B. 334
C. 2334
D. 0123456
E. 01234456
F. 12334567
G. Compilation fails.
Answer:
� 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.
Once at index 2, group brings 34. How come the rest of the result is arrived. Only until 5 are the index available, and if it prints empty strings again, how come it gets to 56 in the end?
Thanks and regards,
Subha.
[ February 27, 2006: Message edited by: subathra sangameswaran ]