【发布时间】:2019-09-03 04:45:41
【问题描述】:
我有一个类似
的字符串字符串 1:abcdefgh{EID##00000000001234567890##EID}khkgfhjjh
字符串 2:qwertyuiop{EID##00000000001234567890##EID}asdaff
我想要输出 1234567890 ,如果 EID##...##EID 存在于 String1 中,如果不存在,它将在字符串 2 中搜索。如果两个结果中都不存在,则结果将是 00000000
但我只能使用 Spring Expression 语言。
我试过类似的东西:
${String1}.indexOf('EID##') != -1 AND ${String1}.indexOf('##EID') != -1 AND (${String1}.indexOf('##EID') - ${String1}.indexOf('EID##'))> 5
?
(${String1}.substring(${String1}.indexOf('EID##')+5,${String1}.indexOf('##EID'))).replaceAll("^0+", "")
:
(${String2}.indexOf('EID##') != -1 AND ${String2}.indexOf('##EID') != -1 AND (${String2}.indexOf('##EID') - ${String2}.indexOf('EID##'))> 5
?
(${String2}.substring(${String2}.indexOf('EID##')+5,${String2}.indexOf('##EID'))).replaceAll("^0+", "")
:
'0000000000')
但问题是我的字符数限制为 350。(这是 523 个字符) 有没有更简单的方法?
【问题讨论】:
-
两个问题:为什么只能使用Spring Expression语言?为什么字数限制为 350?
-
PS:删除不必要的空格、换行符、将
!= -1更改为<0之类的东西已经稍微降低了字符数,尽管470 个字符仍然太长。 ;) 将String1和String2更改为较小的值,例如a和b会将其降低到 386 个字符。为'EID##'创建一个变量会使它在某种程度上等于 350。不幸的是,我根本不知道 Spring 表达式语言.. -
在 Java 10+ 中我可以做到这一点in 125 characters。我在codegolf.stackexchange.com 上非常活跃。 ;)
-
我正在使用一个工具(它是官方使用的),它只允许使用 Spring Expression lang,并且在内部它将这个表达式存储在一个列大小为 350 的数据库中的不可自定义的表中
标签: java regex regular-language spring-el