Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转义java字符串中的%符号以应用string.format_Java_String_String.format_Input Sanitization - Fatal编程技术网

转义java字符串中的%符号以应用string.format

转义java字符串中的%符号以应用string.format,java,string,string.format,input-sanitization,Java,String,String.format,Input Sanitization,在我的项目(Java/Play framework)中,我有一个错误处理路由,它检查来自web服务的响应。如果响应是错误代码,我们将显示相应的错误消息,说明用户输入有什么问题,服务将检查用户输入的有效性 当用户输入%符号时,此逻辑中断,因为错误显示逻辑使用 String.format(message, messageArgs); 它将messageArgs插入到消息字符串中,在该字符串中找到%,如果messageArgs也包含%,则会出现异常 在显示消息之前,我需要清理、转义或以其他方式从用户

在我的项目(Java/Play framework)中,我有一个错误处理路由,它检查来自web服务的响应。如果响应是错误代码,我们将显示相应的错误消息,说明用户输入有什么问题,服务将检查用户输入的有效性

当用户输入%符号时,此逻辑中断,因为错误显示逻辑使用

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!)
java.util.UnknownFormatConversionException:Conversion='i'
在java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2646)
位于java.util.Formatter$FormattSpecifier(Formatter.java:2675)
位于java.util.Formatter.parse(Formatter.java:2528)
位于java.util.Formatter.format(Formatter.java:2469)
位于java.util.Formatter.format(Formatter.java:2423)
位于java.lang.String.format(String.java:2797)
在controllers.api.PublicAPI.renderapirror(PublicAPI.java:176)
位于controllers.api.DeviceAPI.setEmailAddress(DeviceAPI.java:736)
atplay.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557)
atplay.mvc.ActionInvoker.invoke(ActionInvoker.java:508)
atplay.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
atplay.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479)
atplay.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
在Invocation.HTTP请求时(播放!)

谢谢

如果您收到
java.util.UnknownFormatConversionException:Conversion='i'
您很可能在
消息中使用
%i
试图格式化整数,这是不正确的。必须使用
%d
格式化十进制整数。可以找到完全支持的转换规范。

消息字符串中,%符号用另一个%转义。因此,您需要将其加倍:%%
例如:“Bla Bla%i Bla”->“Bla Bla%%i Bla”

messageArgs字符串中,%符号没有问题,您不需要转义它

当您需要打印字符串时,在格式化程序字符串中使用
%%

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

将为您提供95.00%

您能显示错误消息吗?我不认为
%
消息参数中的出现会有任何问题。你能发布一个输入失败的例子吗?准备好了吗?刚刚编辑过帖子如果使用字符串格式我不明白你的意思@archer