
放一个使用效果图片(纯java中使用) 和String.format()之类完全不一样 
好像很多人都看不到图片,换个图床发一下

https://ae01.alicdn.com/kf/U99d3e32cf6824b1d8e5bedf2248b94f5x.jpg
该项目和业界的文本替换的方法完全不一样,
希望在享受java良好生态的同时,获得其他语言的便利性
1 122006 OP 讲道理,虽然应该都是被标题骗进来的,但是应该都不亏吧。 觉得这个项目做得可以欢迎给个 star 哦 |
2 handle233 2021-02-05 15:00:56 +08:00 这是不是该放在推广节点? |
3 chendy 2021-02-05 15:07:15 +08:00 我第一反应是 label break 结果是推广自己的项目,啊这,应该发推广节点吧 |
4 Kasumi20 2021-02-05 15:08:22 +08:00 我选择换到 Kotlin |
5 YouLMAO 2021-02-05 15:09:29 +08:00 via Android 不能发推广,应该直接扔垃圾箱,为了写个字符串,串改这么多, |
6 Rwing 2021-02-05 15:11:10 +08:00 考虑一下 C# ? var name = "world"; var text = $@" <title> hello {name} </title> "; |
7 dqzcwxb 2021-02-05 15:17:23 +08:00 没用过 MessageFormat.format()是吧? |
8 AndyAO 2021-02-05 15:17:55 +08:00 很好的项目 Java 在语法方面确实很保守 很多功能需要靠别的项目来实现 虽然这样降低了效率,但是对于协同工作来说,还是有点优势的,因为语法简单读起来就更容易 Go 好像也是这种设计思路,语法上的特性,给的比其他的新型语言要少得多 |
9 hehe12980 2021-02-05 15:28:59 +08:00 这玩意不就是 Groovy 里的语法么 通常 def a = 'love', def b = "${a} you" , 不过 java 拼字符 确实鸡儿类累 |
10 122006 OP @Kasumi20 老项目切换 kotlin 还是不可能的,java 目前还是主流。这个更多是一个小插件,进行一个小的功能的优化 |
11 122006 OP @hehe12980 没错,就是用的 Groovy 的语法(也是选择 Groovy 作为 Language Injection 的语言),甚至 Kotlin 也有类似的。 大家都有,java 有一个也不过分吧~ |
OP @AndyAO 感谢支持, 直接切换新语言步子跨度太大,门槛更高,使用这种小功能插件并不会影响可读性,正常写法也完全兼容,别人看到也能够理解。 同理,lombok 这么香的原因 更何况是 java 拼字符串实在是一言难尽,而且还很常用。看到一堆加号有点脑袋疼 |
14 lllllliu 2021-02-05 15:50:35 +08:00 let a = "Java" let b = "Script" let str = `${a}${b}` |
15 mightofcode 2021-02-05 16:31:15 +08:00 我被骗了 我草泥马 |
16 learningman 2021-02-05 16:33:25 +08:00 又不是语言内建支持,有啥用 |
17 122006 OP @mightofcode 这位喷子,你在 java 里面用过么? |
18 weizhen199 2021-02-05 16:35:57 +08:00 当年 c#过来写 java 确实这点很难受,还特意自己做了个库 |
19 75er 2021-02-05 16:37:16 +08:0 .neter 摸了摸自己的胡子 这不是基础语法吗? |
21 bugmakerxs 2021-02-05 16:43:17 +08:00 这,不是 springEl 么 |
22 sadfQED2 2021-02-05 16:44:20 +08:00 via Android 哈哈,java 也开始抄袭我大 php 了, php 果然是世界上最好的语言 |
23 122006 OP @learningman 引入依赖之后,用起来也和语言本身特性区别不大 |
24 122006 OP @bugmakerxs 类似,但是不局限于注解内(我是这么理解的)。可以在正常代码的任意地方替代字符串使用。 |
25 selca 2021-02-05 17:14:46 +08:00 via Android JSR269 实现的东西? |
26 yazinnnn 2021-02-05 17:21:47 +08:00 这侵入性都快大过直接换 kotlin 了... |
27 luozic 2021-02-05 17:57:21 +08:00 via iPhone 为啥不上 kotlin or 用 groovy scala 算求…,反正 Java 的模式匹配基本等于零 |
28 sheeta 2021-02-05 18:08:07 +08:00 我选择 PHP |
29 shakaraka PRO 这不就是 js 的 ``` const value = 'YO' console.log(`Hello: ${ value }`) ``` 么 |
30 cheng6563 2021-02-05 18:15:18 +08:00 via Android 这。。。,lombok 这种加注释处理器的都一堆人不舍得用,你这还直接改 javac 了 |
31 Yohann97 2021-02-05 18:15:20 +08:00 模板字符串?谁说我没用过 Hutool util |
34 122006 OP @cheng6563 可以不用,但是要有,这不过分吧。改 javac 的项目也不少,和 lombok 一样,用不用看个人自己选择。重写 javac 又没有引发别的问题,一棍子打死没意义 |
37 kingfalse 2021-02-05 18:24:58 +08:00 啊这,说好的外面蹭蹭,结果你都进到了编译层,太深了太深了, |
40 arvinsilm 2021-02-05 18:28:05 +08:00 只是单纯的字符串替换功能,并且会造成可读性下降(不符合标准 Java 语法,缺少其他语言经验的 Java 程序员会比较懵)。适合个人项目吧 |
41 122006 OP @arvinsilm 功能上不存在非用不可的情况,只是对 java 中字符串使用的一个优化。语法和其他语言的类似,其实学习成本也不是很高。 多谢支持,让大家写个人项目的时候,能够更快捷直观一点也足够了,毕竟确实解决了我自己一大痛点 |
42 meiyoumingzi6 2021-02-05 19:17:09 +08:00 有点像 python 的 f-string |
43 passerbytiny 2021-02-05 19:20:41 +08:00 via Android 刷小聪明推广,滚粗。 顺便提一下,Lombok 是用注解替代模板代码(本质上跟切面编程没啥区别),Groovy 、kotlin 是额外套了一套语法(本质上算另一种语言了)。楼主这个,就纯粹是侵入式语法糖,相当于“不习惯英语就让说英语的人去说汉语”。 |
44 122006 OP @passerbytiny 首先标题让你点进来很不好意思,用了上个世纪的推广方式 lombok 不仅仅是代替了 getset 模板方法,其特性中还有诸如 val var 之类的语法糖,和面向切面编程的概念完全不一致 语法糖当然是侵入式,不侵入的语法糖是什么? 至于说汉语的问题,我并不是提出一个倡议一定要怎么做,而是提出了一个可能。 如果对语法糖没有追求的话,那没必要升级 java8,用 7 甚至用 6 不是更好?(当然还有别的好处) 真要争执的话,那转用 kotlin 的岂不是为了不说英语直接撞墙投胎了么? 总而,爱用用,不用的话很抱歉让诸位点进来,毕竟标题确实不对。抱歉 |
45 Cbdy 2021-02-05 19:51:28 +08:00 via Android 很棒,别出心裁,但是你用了$,那别的也用了$的库就捉急了,我也有个库用了$ 不知道有什么好的兼容方法 |
46 122006 OP @Cbdy 感谢支持。 其实没影响,当前版本偷懒了,只会分析代码中是$的方法,并对其中的硬编码字符串进行解析,所以其他库的$方法也会进行解析的。只要硬编码字符串中不涉及$的,没有问题的 当然这样的方案确实不 OK,后续版本会通过分析 import 引用,只会拦截我这个方法里的参数 |
47 luchong 2021-02-05 20:13:03 +08:00 C#:基本操作!! var str=$"hello,{name}"; |
48 Kirsk 2021-02-05 20:17:02 +08:00 表示很反感这种语法 --quote JAVA 程序员却只能痛苦地用密密麻麻的加号拼接 枚举不会 StringBuilder 放着看的? StringJoin 用过吗 没用过是不是可以开喷了 |
50 luozic 2021-02-05 20:57:17 +08:00 扩展语法,用法 lombok ;或者模板引擎? |
51 Cbdy 2021-02-05 21:02:55 +08:00 via Android @122006 我也经常需要用 Java 来弄字符串模板,不过我是这么处理的 public static @NotNull String render(@NotNull String template, @NotNull Map<String, ?> scope) { return Pattern.compile("(\\$\\{(\\w+)})").matcher(template).replaceAll(mr -> requireNonNull(scope.get(mr.group(2)), mr.group(1) + " not found in scope").toString()); } |
52 tamer 2021-02-05 22:55:13 +08:00 兄弟,2021 年了,看看 java 的生态 要是真想搓点新鲜的, 可以选择那几个大框架贡献贡献 闭门造螺丝 还起这个标题真的不多说了 |
53 micean 2021-02-05 23:00:08 +08:00 via Android 挺好的东西,出来的有点晚,另外字符串模板还需要一个很关键的就是渲染高亮 |
54 crclz 2021-02-05 23:34:40 +08:00 C#的东西被各种语言都偷完了 |
55 qiezixiansheng 2021-02-06 00:39:07 +08:00 啊,这 |
56 dswyzx 2021-02-06 01:01:58 +08:00 via iPhone 我日哦,第一次心疼 javaer |
57 122006 OP @Kirsk 比如打印日志之类的如果要大量括号之类的格式,括号是很常见的。你打印个日志也写个十多行的 Stringbuilder ? |
59 Kirsk 2021-02-06 01:16:45 +08:00 via Android @122006 你搞笑嘛 可变参数不行?在你眼里只有一个个操作 没看懂再仔细看 不限场景 如果还没懂 麻烦去补下程序如何抽象 |
62 122006 OP @Kirsk 不要暴躁,我保证不强迫你用。可变参数接受参数进行拼接的时候,会有额外的引号和参数间的空格。额外的行字节数会引发自动换行等问题,阅读的时候这个拼接字符串也并不连贯。 比如 lambda 表达式,你还是更加会使用 java7 的匿名内部类表示?反正也可以实现这个效果 |
63 122006 OP @Cbdy 有个问题,你需要一个临时名字来代替每个代码块。这个其实起名字很麻烦且没有意义,而且还会涉及重名等问题,比如单个变量。。。。 而且可能传入一个 map 也需要多行代码来实现 |
65 zzl22100048 2021-02-06 02:33:09 +08:00 via iPhone 可以加个文本块的糖配合一下 |
66 newmlp 2021-02-06 09:58:03 +08:00 我连 Java 都没写过,更何况 Java 这种语法了 |
68 xiaowangge 2021-02-06 10:45:10 +08:00 @Livid 标题党、推广。 |
69 122006 OP @zzl22100048 文本块语法糖在 java15 有提供支持。就不班门弄斧做重复方法了 |
70 122006 OP 并不是常规字符串占位替代方法哦 |