放一个使用效果图片(纯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 2
我第一反应是 label break
结果是推广自己的项目,啊这,应该发推广节点吧 |
4
Kasumi20 2021-02-05 15:08:22 +08:00 1
我选择换到 Kotlin
|
5
YouLMAO 2021-02-05 15:09:29 +08:00 via Android 1
不能发推广,应该直接扔垃圾箱,为了写个字符串,串改这么多,🧧🧧🧧🧧🧧🧧🧧🧧🧧🧧🧧
|
6
Rwing 2021-02-05 15:11:10 +08:00 2
考虑一下 C# ? 😊
var name = "world"; var text = $@" <title> hello {name} </title> "; |
7
dqzcwxb 2021-02-05 15:17:23 +08:00 4
没用过 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 有一个也不过分吧~ |
12
122006 OP @AndyAO 感谢支持,
直接切换新语言步子跨度太大,门槛更高,使用这种小功能插件并不会影响可读性,正常写法也完全兼容,别人看到也能够理解。 同理,lombok 这么香的原因 更何况是 java 拼字符串实在是一言难尽,而且还很常用。看到一堆加号有点脑袋疼 |
14
lllllliu 2021-02-05 15:50:35 +08:00 1
let a = "Java"
let b = "Script" let str = `${a}${b}` |
15
mightofcode 2021-02-05 16:31:15 +08:00 4
我被骗了
我草泥马 |
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:00 1
.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
wunonglin 2021-02-05 18:12:12 +08:00
这不就是 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 2
啊这,说好的外面蹭蹭,结果你都进到了编译层,太深了太深了,
|
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 1
@Livid 标题党、推广。
|
69
122006 OP @zzl22100048 文本块语法糖在 java15 有提供支持。就不班门弄斧做重复方法了
|
70
122006 OP 并不是常规字符串占位替代方法哦
|