java 字符串文字筛选_拜托,Java。 最终是否支持多行字符串文字

java 字符串文字筛选

我了解Java语言的思想很难以向后兼容的方式进行维护。 我知道JDK API(例如集合)的想法很难打破。 是。

我不明白为什么Java 仍然没有多行字符串文字。

您多久编写一次这样的JDBC代码(或您想要嵌入到Java中的任何其他外部语言或标记,例如JSON或XML)?

try (PreparedStatement s = connection.prepareStatement(
    "SELECT * "
  + "FROM my_table "
  + "WHERE a = b "
)) {
    ...
}

怎么了

  • 语法正确性 ,即不要忘记在每行的末尾添加空格
  • 宿主语言的样式与外部语言的样式 ,请确保上面的代码看起来用Java格式看起来“不错”,但对于使用方服务器端则没有格式化
  • SQL注入 ,我们不是教导我们的下辈不要在SQL中执行这种字符串连接以防止SQL注入吗? 当然,以上内容仍然是安全的,但是是什么原因使经验不足的维护者无法嵌入用户输入呢?

今天,我正在使用Xtend编写一些代码, Xtend是一种非常有趣的语言,可以编译成Java源代码。 Xtend对模板非常有用(例如,用于生成jOOQ的Record1Record22 API)。 我注意到多行字符串的另一个非常好的功能:

无需逃脱!

Xtend中的多行字符串以三撇号终止。 例如

// Xtend
val regex = '''import java\.lang\.AutoCloseable;'''

是的,以上是有效的Java正则表达式。 匹配AutoCloseable类型的导入时,我在转义点。 我不必在普通字符串中执行繁琐的两次转义操作,就可以告诉Java编译器反斜杠实际上是反斜杠,而不是Java转换了以下字符:

// Java
String regex = "import java\\.lang\\.AutoCloseable;";

所以……转换为我们最初SQL示例,我真的很想写这个:

try (PreparedStatement s = connection.prepareStatement(
    '''SELECT *
       FROM my_table
       WHERE a = b'''
)) {
    ...
}

具有很大的优势:字符串插值(甚至PHP都有)!

String tableName = "my_table";
int b = 1;
try (PreparedStatement s = connection.prepareStatement(
    '''SELECT *
       FROM ${tableName}
       WHERE a = ${b}'''
)) {
    ...
}

小但非常有效的改进

这将是非常小的(就语言复杂性预算而言:只是一个新令牌),但是对于我们所有人都在Java中嵌入外部语言(SQL,XML,XPath,Regex等)的非常有效的改进。 我们做了很多。 我们讨厌它。

它不必像Xtend的多行字符串文字那样强大( 它确实与用于格式设置和模板化表达式的空白管理结合在一起 )。 但这将是一个开始。

请把它作为新年的决议! :)

翻译自: https://www.javacodegeeks.com/2016/01/please-java-finally-support-multiline-string-literals.html

java 字符串文字筛选

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值