Frage

Warum diese Kompilierung in Java 6 (Sun 1.6.0_16):

System.out.println("\u000B");

... aber nicht so aus:

System.out.println("\u000A");

An diesem Programm:

public class Test {
  public static void main(String argv[]) {
  System.out.println("\u000A");
  }
}

Ich erhalte eine

Test.java:3: unclosed string literal
System.out.println("\u000A");

Was ist denn hier los?

War es hilfreich?

Lösung

Das Problem ist, dass der Unicode-Ersatz sehr früh in der Zusammenstellung erfolgt. Unicode Fluchten sind nicht nur gültig in Strings und Zeichenliterale (wie andere Escape-Sequenzen wie \t) sind - sie sind gültig überall in Code. Sie sind in einem anderen Bereich der Spezifikation beschrieben - Abschnitt 3.3 anstatt Abschnitt 3.10.6 ; nur das letztere ist über Charakter und Stringliteral Escape-Sequenzen.

Grundsätzlich Leseabschnitt 3 der Spezifikation für weitere Details über lexikalische Struktur:)

So Ihr Code war wirklich entspricht:

public class Test {
  public static void main(String argv[]) {
  System.out.println("
");
  }
}

... das ist eindeutig nicht gültige Code. Für Wagenrücklauf und Zeilenvorschub, im Grunde ist es am besten, die „\ r“ zu verwenden und „\ n“ Escape-Sequenzen.

Persönlich sehe ich diesen Umgang mit Unicode als ein Fehler in Java zu entkommen, aber es gibt nicht viel, was wir jetzt dagegen tun können: (

Andere Tipps

  

Unicode Fluchten werden vor der lexikalischen Analyse erweitert.   Die Tatsache, dass der Unicode-Escape innerhalb eines Stringliteral erscheint, ist irrelevant.   Siehe JLS 3.2.

es ist, weil \ u000a = \ n und der Compiler Prozess der Java-Quelle, um es in Token zu konvertieren, so dass Sie nicht, dass die Unicode-Zeichen in Ihrem Code verwenden können. Das gleiche gilt für \ u000d = \ r

Wenn ich mich nicht täusche, zu vermeiden, die prepocessing wir es durch eine Änderung der Linie in lösen könnte:

System.out.println((char)10);

Die Einschränkung ist, dass durch ein CHAR zu sein, ist es Verlängerung von 0 bis 255 sein wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top