Issue
if("test%$@*)$(%".matches("[^a-zA-Z\\.]"))
System.exit(0);
if("te/st.txt".matches("[^a-zA-Z\\.]"))
System.exit(0);
The program isn't exiting even though the regexes should be returning true. What's wrong with the code?
Solution
matches
returns true
only if regex matches entire string. In your case your regex represents only one character that is not a-z
, A-Z
or .
.
I suspect that you want to check if string contains one of these special characters which you described in regex. In that case surround your regex with .*
to let regex match entire string. Oh, and you don't have to escape .
inside character class [.]
.
if ("test%$@*)$(%".matches(".*[^a-zA-Z.].*")) {
//string contains character that is not in rage a-z, A-Z, or '.'
BUT if you care about performance you can use Matcher#find()
method which
can return
true
the moment it will find substring containing match for regex. This way application will not need to check rest of the text, which saves us more time the longer remaining text is.Will not force us to constantly build Pattern object each time
String#matches(regex)
is called, because we can create Pattern once and reuse it with different data.
Demo:
Pattern p = Pattern.compile("[^a-zA-Z\\.]");
Matcher m = p.matcher("test%$@*)$(%");
if(m.find())
System.exit(0);
//OR with Matcher inlined since we don't really need that variable
if (p.matcher("test%$@*)$(%").find())
System.exit(0);
Answered By - Pshemo
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.