Java: Literales Prozentzeichen in der printf-Anweisung

138

Ich versuche, einer printf-Anweisung in Java ein tatsächliches Prozentzeichen hinzuzufügen, und erhalte folgende Fehlermeldung:

lab1.java:166: illegal escape character
                System.out.printf("%s\t%s\t%1.2f\%\t%1.2f\%\n",ID,pattern,support,confidence);
                                                 ^
lab1.java:166: illegal escape character
                System.out.printf("%s\t%s\t%1.2f\%\t%1.2f\%\n",ID,pattern,support,confidence);
                                                          ^
2 errors

Ich kann nicht herausfinden, wie ich ein tatsächliches Prozentzeichen in meinen Ausdruck einfügen soll. Ich dachte, es würde funktionieren, wenn man \% verwendet, um zu entkommen, aber das ist es nicht.

Irgendwelche Ideen?

Domenic
quelle

Antworten:

197

Das Prozentzeichen wird mit einem Prozentzeichen maskiert:

System.out.printf("%s\t%s\t%1.2f%%\t%1.2f%%\n",ID,pattern,support,confidence);

Auf die vollständige Syntax kann in Java-Dokumenten zugegriffen werden . Diese speziellen Informationen befinden sich im Abschnitt Conversionsdes ersten Links.

Der Grund, warum der Compiler einen Fehler generiert, besteht darin, dass einem Backslash möglicherweise nur eine begrenzte Anzahl von Zeichen folgt. %ist kein gültiges Zeichen.

Soulmerge
quelle
102

Das Zeichen für entgangenes Prozent ist doppeltes Prozent (%%):

System.out.printf("2 out of 10 is %d%%", 20);
Cletus
quelle
2

Sie können StringEscapeUtils aus dem Apache Commons Logging-Dienstprogramm verwenden oder manuell mit Code für jedes Zeichen maskieren.

Harkamwaljeet Singh
quelle
Sollte StringEscapeUtilsvon verwenden commons-text, da der von commons-lang3veraltet ist.
Eric Wang