• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

SCJP book regex, pattern and matcher question

 
subathra sangameswaran
Greenhorn
Posts: 27
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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 ]
 
Ulf Dittmer
Rancher
Posts: 42968
73
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
A very similar question was asked just last week.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic