Java: signo de porcentaje literal en la declaración printf

138

Estoy tratando de agregar un signo de porcentaje real en una declaración printf en Java y obtengo el error:

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

No puedo entender cómo poner un signo de porcentaje real en mi printf? Pensé que usar \% para escapar funcionaría, pero no lo es.

¿Algunas ideas?

Domenic
fuente

Respuestas:

197

El signo de porcentaje se escapa mediante un signo de porcentaje:

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

Se puede acceder a la sintaxis completa en java docs . Esta información particular se encuentra en la sección Conversionsdel primer enlace.

La razón por la que el compilador genera un error es que solo una cantidad limitada de caracteres puede seguir una barra invertida. %No es un personaje válido.

soulmerge
fuente
102

El signo de porcentaje escapado es el doble de porcentaje (%%):

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

Puede usar StringEscapeUtils desde la utilidad de registro de Apache Commons o escapar manualmente usando el código de cada personaje.

Harkamwaljeet Singh
fuente
Debería usar StringEscapeUtilsfrom commons-text, ya que el from commons-lang3está en desuso.
Eric Wang