>>> My Java program reads in (from an external source) text that contains
>>> the same sort of unicode character escape sequences as java source
[quoted text clipped - 11 lines]
> support things like \\ to actually insert a backslash and perhaps
> support things like \n.
If he is defining a new specification for escaped input, this would be
nice but not necessary. "\" can be escaped as "\u005C", and a newline
as "\u000A". In Java source code, "\u005C" results in a malformed string
literal (which means one needs to use "\n" instead), but that escape
sequence is permitted in properties files. On the other hand, the Java
compiler and Properties.load() do not recognize the C escape-sequences
"\v" and "\a" for VT and BEL.
I think Arne's response (that used a regular expression) was too
complicated, and the response to which you are responding was
poorly-thought-out (because strings are immutable in Java). Here's a
possible solution:
String unescape(String s) {
int i=0,len=s.length(); char c; StringBuffer sb = new StringBuffer(len);
while (i<len) {
c = s.charAt(i++);
if (c=='\\') {
if (i<len) {
c = s.charAt(i++);
if (c=='u') {
c = (char) Integer.parseInt(s.substring(i,i+4),16);
i += 4;
} // add other cases here as desired...
}} // fall through: \ escapes itself, quotes any character but u
sb.append(c);
}
return sb.toString();
}
Unlike Arne's solution, it examines each character in the string only
once, and it doesn't require the java.util.regex package (which was not
introduced until Java 1.4). I also think it's more readable, to one who
is trying to verify that it does exactly what's expected and no more.
(What would Arne's solution do to "\u005Cu0020\u0020"? Is that the
correct result?)

Signature
PGP key posted on website ... http://www.lmert.com/people/davidl/
Dale King - 01 Sep 2006 15:28 GMT
>>>> My Java program reads in (from an external source) text that contains
>>>> the same sort of unicode character escape sequences as java source
[quoted text clipped - 16 lines]
> literal (which means one needs to use "\n" instead), but that escape
> sequence is permitted in properties files.
It's up to him what he wants to specify, but personally I would prefer
the \\ and \n.
> On the other hand, the Java
> compiler and Properties.load() do not recognize the C escape-sequences
> "\v" and "\a" for VT and BEL.
Which is understandable. BEL is specific to consoles and Java has no
real support for consoles because they are too platform specific and VT
is rarely used.
> I think Arne's response (that used a regular expression) was too
> complicated, and the response to which you are responding was
> poorly-thought-out (because strings are immutable in Java). Here's a
> possible solution:
>
> String unescape(String s) {
The proper time to do the conversion is when the text is being read from
the "external source" using some form of FilterReader subclass. I
remember now that I wrote one of those once, but after a long search I
have figured out that I left that code at my previous employer and did
not keep a copy of it (which is a shame because that was part of
something that was some really good work).

Signature
Dale King