2013-09-20 4 views
6

В моем проекте (Java/Play framework) У меня есть маршрутизация ошибок, которая проверяет ответ от веб-службы, если ответ является кодом ошибки, мы отображаем соответствующий сообщение о том, что было проблемой при вводе пользователя, служба проверяет достоверность ввода пользователя.Escape% symbol в строке java для применения String.format

Когда пользователь вводит символ%, эта логика ломается, потому что логика отображения ошибок использует

String.format(message, messageArgs); 

Какие Интерполирует messageArgs интро в строке сообщения, где он находит%, а если messageArgs содержит%, как Я получаю исключение.

Перед отображением сообщения мне необходимо очистить, убрать или иным образом удалить% от пользовательских входов.

сообщение: Запрошенный адрес электронной почты% s недействителен messageArgs: orlybg%@gmail.com

Любые советы о том, как это сделать в Java в простой, короткий путь?

вот часть ошибки войти

java.util.UnknownFormatConversionException: Conversion = 'i' 
    at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2646) 
    at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2675) 
    at java.util.Formatter.parse(Formatter.java:2528) 
    at java.util.Formatter.format(Formatter.java:2469) 
    at java.util.Formatter.format(Formatter.java:2423) 
    at java.lang.String.format(String.java:2797) 
    at controllers.api.PublicAPI.renderAPIError(PublicAPI.java:176) 
    at controllers.api.DeviceAPI.setEmailAddress(DeviceAPI.java:736) 
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557) 
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508) 
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484) 
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479) 
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161) 
    at Invocation.HTTP Request(Play!) 

Спасибо!

+2

Можете ли вы показать сообщение об ошибке? Я не думаю, что наличие '%' в 'messageArgs' будет проблемой. –

+0

Можете ли вы опубликовать пример ввода, который не удается? – Joni

+0

Готов только что отредактировал сообщение – orlybg

ответ

1

Если вы принимаете java.util.UnknownFormatConversionException: Conversion = 'i', то, возможно, вы используете %i в своем message, пытаясь отформатировать целое число, это некорректно. Вы должны использовать %d для форматирования целочисленного числа децимал. Полная поддерживаемая спецификация конверсии может быть найдена here.

5

В сообщении Строка, знак% пропускается с другим%. Так что вам нужно будет удвоить его: %%
Например: «Бла бла бла% я» -> «Бла-бла-бла %% я»
In messageArgs String, нет никаких проблем с знаком% и Вам не нужно, чтобы избежать его

1

использование %% в строке форматирования, когда нужно напечатать строку %:

String.format("sendOneSuccessCountRate: %7.2f%%" 
       ,sendOneSuccessCountRate //0.95 
      ); 

даст вам 95.00%