Java 安全的 String.format 和转义 %

标签 java

我正在使用 Java API 的 String.format 方法来记录一些东西。我的方法是这样的:

public static void log(String message, Object... params){
    System.out.println(String.format(message, params));
}

但问题是,如果用户发送的消息中某处包含 % 字符,则会抛出异常。这是一个场景:

log("SELECT * FROM my WHERE name like '%six%'");

并且 Java 正在寻找替代 %s(没问题)和 %'(哎呀)的东西。我想解决这个问题。因为没有params%s会丢失,%'会导致异常。

一个解决方案可以是 message.replace("%", "%%") 但我不确定它是否是一个优雅的解决方案。

最佳答案

log 不知道给定的 % 是作为格式说明符还是百分号。考虑以下示例:

log("%s%s", "test");

"test%s""%stest" 还是错误?

因此,必须在调用站点解决问题:

log(escape("SELECT * FROM my WHERE name like '%six%'"));

其中 escape() 是您需要编写的函数,它将所有 % 替换为 %%

或者,可以在调用站点使用以下内容:

log("%s", "SELECT * FROM my WHERE name like '%six%'");

关于Java 安全的 String.format 和转义 %,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7429852/

相关文章:

java - 0.99999999999相乘时可以四舍五入到1.0吗?

java - "Could not find or load main class"使用cmd提示运行java程序时出错

java - 如何忽略登录表单上的Spring数据验证?

java - 从字符串输入中打印偶数单词?

java - 速度+ Spring

java - 用 double 值填充 double 组

java - 想用HibernateUtils删除,但是抛出异常

java - 如何强制编辑文本框通过缩进格式化任何替换文本?

java - 调用可执行文件并传递参数

java - AChartEngine 中 X 轴标题和 X 轴标签之间的边距