Why can't I use \u000D and \u000A as CR and LF in Java? It's giving an error when I compile the code:
String x = "\u000A hello";//Error - Illegal escape character in string literal.
Why can't I use \u000D and \u000A as CR and LF in Java? It's giving an error when I compile the code:
String x = "\u000A hello";//Error - Illegal escape character in string literal.
Unicode escapes are pre-processed before the compiler is run. Therefore, if you put \u000A
in a String literal like this:
String someString = "foo\u000Abar";
It will be compiled exactly as if you wrote:
String someString = "foo
bar";
Stick to \r
(carriage return; 0x0D
) and \n
(line feed; 0x0A
)
Bonus: You can always have fun with this, especially given the limitations on most syntax highlighters. Next time you've got a sec, try running this code:
public class FalseIsTrue {
public static void main(String[] args) {
if ( false == true ) { //these characters are magic: \u000a\u007d\u007b
System.out.println("false is true!");
}
}
}
//
is a valid identifier iff you use unicode escapes. It's much easier to reason about how the preprocessor works in Java, but it's also much easier to shoot yourself in the foot. –
Polyclitus @
(although that's more useful to code generators, usually). –
Oestriol blah.cs(5,19): error CS1056: Unexpected character '\u002F'
(a few times) and blah.cs(5,19): error CS1519: Invalid token '\u002F' in class, struct, or interface member declaration
. Although I would guess that there isn't much C# code out there that tries to (ab)use this. –
Oestriol Because it falls within the range of Unicode Control characters
Which is U+0000–U+001F
and U+007F
.
Unicode control characters are used to control the interpretation or display of text, but these characters themselves have no visual or spatial representation.
They can be escaped by using \
like described in above answer by @Mark
FROM RFC:
2.5. Strings
The representation of strings is similar to conventions used in the C family of programming languages. A string begins and ends with quotation marks. All Unicode characters may be placed within the quotation marks except for the characters that must be escaped: quotation mark, reverse solidus, and the control characters (U+0000 through U+001F).
Any character may be escaped.
建议最好不要用 It's better not to use it 试一下下面的代码,你就明白了 Try the following code and you'll see
public static void main(String[] args) {
String a = "Hello";
// \u000d a="world";
System.out.println(a);
// \u000a a="hello world!";
System.out.println(a);
}
© 2022 - 2024 — McMap. All rights reserved.
\u0008
for backspace then not working to delete the previous code? – Kutchins