Java 模板变量替换——字符串替换器

本文介绍三种Java模板变量替换方法,包括使用org.apache.commons.text、java.text.MessageFormat和java.lang.String进行字符串替换的具体实现,展示了如何设置变量默认值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明

  • 这里分享 3 种方法,从功能最强大的开始

可选方法

org.apache.commons.text

  • 参考文档:https://commons.apache.org/proper/commons-text/javadocs/api-release/index.html
  • 代码:
     Map valuesMap = new HashMap();
     valuesMap.put("animal", "quick brown fox");
     valuesMap.put("target", "lazy dog");
     String templateString = "The ${animal} jumped over the ${target}.";
     StringSubstitutor sub = new StringSubstitutor(valuesMap);
     String resolvedString = sub.replace(templateString);
    
  • 输出:The quick brown fox jumped over the lazy dog.
  • 可以为变量设置默认值,格式为:${undefined.number:-1234567890},其中 undefined.number是变量名,:-是分隔符,1234567890是默认值。
  • 代码:
     Map valuesMap = new HashMap();
     valuesMap.put("animal", "quick brown fox");
     valuesMap.put("target", "lazy dog");
     String templateString = "The ${animal} jumped over the ${target}. ${undefined.number:-1234567890}.";
     StringSubstitutor sub = new StringSubstitutor(valuesMap);
     String resolvedString = sub.replace(templateString);
    
  • 输出:The quick brown fox jumped over the lazy dog. 1234567890.

java.text.MessageFormat

  • 代码:
    Object[] params = new Object[]{"hello", "!"};
    String msg = MessageFormat.format("{0} world {1}", params);
    
  • 输出:hello world!

java.lang.String

  • 代码:
    String s = String.format("My name is %s. I am %d.", "Andy", 18);
    
  • 输出:My name is Andy. I am 18.
### 如何在Java中防止SQL注入的最佳实践和方法 #### 使用参数化查询 为了有效预防SQL注入,推荐采用参数化查询。这种方式通过预编译SQL语句并绑定变量来实现安全的数据访问操作[^3]。 ```java String sql = "SELECT * FROM users WHERE username=? AND password=?"; try (PreparedStatement pstmt = connection.prepareStatement(sql)) { pstmt.setString(1, userInputUsername); pstmt.setString(2, userInputPassword); ResultSet rs = pstmt.executeQuery(); } ``` 此代码片段展示了如何利用`PreparedStatement`接口创建带有问号占位符的SQL命令字符串,并随后调用相应类型的setter方法设置实际值。由于这些值不会被解释为SQL的一部分而是作为单独传递给数据库引擎处理的数据项对待,因此可以有效地抵御恶意构造输入带来的风险。 #### 利用ORM框架特性 现代对象关系映射(ORM)工具通常内置了防范措施以应对潜在威胁。例如MyBatis框架支持使用`${}`语法直接嵌入未经转义的内容到最终构建出来的SQL表达式里;然而更建议的做法是运用`#{}`形式指定字段名,这会触发内部机制自动转换为目标表单上的参数位置标记——即前述提到过的问号符号,从而确保整个流程遵循严格的验证逻辑[^4]。 ```xml <select id="getUserById" parameterType="int" resultType="User"> SELECT * FROM users WHERE id=#{id}; </select> ``` 上述XML配置文件定义了一个简单的数据检索请求模板,其中`#{id}`部分会被替换成由外部传入的具体数值而不必担心引起任何意外后果。 #### 输入校验与清理 除了依赖底层API提供的保护手段外,应用层面上也应当加强对用户提交信息合法性的审查力度。具体而言就是针对不同场景设定合理的约束条件并对不符合预期格式的部分予以适当调整或拒绝接收: - 对于纯文本型别的属性可考虑限定最大长度; - 数字序列则需确认其范围合理性; - 特殊字符集务必经过严格筛选过滤掉可能引发解析错误甚至破坏结构稳定性的成分。 综上所述,在开发过程中始终贯彻以上原则有助于显著降低遭受SQL注入攻击的可能性,保障信息系统整体运行环境的安全可靠程度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值