在我的项目(Java / Play框架)中,我有一个错误处理路由,如果响应是错误代码,则检查来自Web服务的响应,我们显示相应的错误消息,说明用户输入有什么问题,该服务检查用户输入的有效性。
当用户输入%符号时,该逻辑会中断,因为错误显示逻辑使用
String.format(message, messageArgs);
其中插入messageArgs介绍它找到%的消息String,如果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!)
谢谢!
答案 0 :(得分:6)
在消息字符串中,%符号将使用另一个%进行转义。所以你需要加倍:%%
例如:“Bla bla%i bla” - &gt; “Bla bla %% i bla”
在 messageArgs 字符串中,%符号没有问题,您无需转义它
答案 1 :(得分:3)
当您需要打印字符串%%
时,在格式化程序字符串中使用%
:
String.format("sendOneSuccessCountRate: %7.2f%%"
,sendOneSuccessCountRate //0.95
);
会给你95.00%
答案 2 :(得分:1)
如果您收到java.util.UnknownFormatConversionException: Conversion = 'i'
,则可能在%i
尝试格式化整数时使用message
,这是不正确的。您必须使用%d
格式化deciamal整数。可以找到完全支持的转换规范here。