Win a copy of Securing DevOps this week in the Security forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

why compile error in "Pattern.compile()?  RSS feed

 
Greenhorn
Posts: 18
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
hi, all
I want a pattern consists only a single backslash(\)
so I wrote Pattern.compile("\\");
but compiler complains like the following

why?
thx
--eliot
[ November 22, 2003: Message edited by: Eliot Skywalker ]
 
Wanderer
Sheriff
Posts: 18671
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You're actually dealing with two compilers here - the javac compiler, and the pattern compiler. And both compilers use \ to signal an escape sequence, and \\ to signal a normal \. So the problem is:
You start with a String literal:
"\\"
The javac compiler sees this and interprets it to mean
\
The the pattern compiler looks at it, sees a single \, and is confused, because \ needs to have something after it, like \n or \\. So, it gives you an error message.
Instead, start with:
"\\\\"
javac will interpret this as
\\
and the pattern compiler will see this as
\
which is what you wanted. The rule of thumb is, for every plain literal \ you have in your intended pattern text, put four \'s in the String literal you compile to get the pattern. Yeah, it's weird, but it works.
 
Eliot Skywalker
Greenhorn
Posts: 18
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
thank you,Jim
so I'll have to write
str.replaceAll("\\\\","\\\\\\\\")
something like that

I tested it,like you've said, weird,but it works
-eliot
 
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!