Java: sinal de porcentagem literal na instrução printf

138

Estou tentando adicionar um sinal de porcentagem real a uma instrução printf em Java e estou recebendo o erro:

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

Não consigo descobrir como colocar um sinal de porcentagem real no meu printf? Eu pensei que usar \% para escapar funcionaria, mas não é.

Alguma ideia?

Domenic
fonte

Respostas:

197

O sinal de porcentagem é escapado usando um sinal de porcentagem:

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

A sintaxe completa pode ser acessada em documentos java . Esta informação específica está na seção Conversionsdo primeiro link.

O motivo pelo qual o compilador está gerando um erro é que apenas uma quantidade limitada de caracteres pode seguir uma barra invertida. %não é um caractere válido.

soulmerge
fonte
102

O sinal de porcentagem com escape é o dobro da porcentagem (%%):

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

Você pode usar o StringEscapeUtils do utilitário Apache Commons Logging ou escapar manualmente usando o código de cada caractere.

Harkamwaljeet Singh
fonte
Deve usar StringEscapeUtilsfrom commons-text, já que o de from commons-lang3está obsoleto.
Eric Wang