return 数组中的子字符串
return substring within an array
我找到了一个很好的解决方案,但并不完全适合我的问题:
String s = "abc.def.ghfj.qert";
s.substring(s.lastIndexOf(".") + 1)
来源:
Java: Getting a substring from a string starting after a particular character
我必须在数组中使用它,但我不知道该怎么做...抱歉。
我得到了以下代码:
a = [];
b=getLinkedItems(item("link_M"))
for(i in 0..b.size()-1)
{ a[i] = b.getAt(i).toString().reverse().substring(0,1) }
total = 0
for(x in a) { total = total +","+x }
val = total.substring(2)
这是我的结果:
[b] = [java.util.ArrayList] [
Group:m.1:book1150:MGROUP.6/M/m.1,
Group:m.6:book1150:MGROUP.6/M/m.6,
Group:m.9:book1150:MGROUP.6/M/m.9]
[a] = [java.util.ArrayList] [1, 6, 9]
[total] = "0,1,6,9"
[val] = "1,6,9"
...但如果我的数组包含大于 9 的值,则不可行。
What can I do if my array is e.g.:
[b] = [java.util.ArrayList] [
Group:m.1:book1150:MGROUP.6/M/m.1,
Group:m.6:book1150:MGROUP.6/M/m.6,
Group:m.9:book1150:MGROUP.6/M/m.12]
我的结果应该是:
[val] = "1,6,12"
谁能帮帮我?我必须在哪里写,例如"lastIndexOf(".")" 或者谁有更好的解决方案?
提前致谢。
你在问题中的语法令人困惑,但假设你的意思是:
def list = [
'Group:m.1:book1150:MGROUP.6/M/m.1',
'Group:m.6:book1150:MGROUP.6/M/m.6',
'Group:m.9:book1150:MGROUP.6/M/m.12'
]
那么你可以这样做:
def val = list.collect { row -> row.findAll(/\d+/)[-1] }.join(',')
对于民丹岛集团的东西,试试:
def val = list.collect { row -> row.toString().findAll(/\d+/)[-1] }.join(',')
我会建议改用正则表达式,也许还可以使用一些基于 List
的混合插件。可能是这样的:
def b = getLinkedItems(item("link_M"))
def a = b.collect { (it.toString() =~ /\d+$/)[0] }
def val = a.join(",")
def total = "0," + val
在此,b.collect
为 b
的每个元素运行一次 Closure
,返回 List
个结果以分配给 a
.查找 (=~
) 运算符 returns 一个 Matcher
对象,它在源 String
在左侧。可以通过像 List
一样对 Matcher
进行索引来检索匹配的值。然后在下一行,a.join(",")
以 ,
作为分隔符将 a
的所有元素连接在一起。
正则表达式/\d+$/
表示:
\d+
一位或多位数字的任意子串
$
源码结尾String
我找到了一个很好的解决方案,但并不完全适合我的问题:
String s = "abc.def.ghfj.qert";
s.substring(s.lastIndexOf(".") + 1)
来源: Java: Getting a substring from a string starting after a particular character
我必须在数组中使用它,但我不知道该怎么做...抱歉。
我得到了以下代码:
a = [];
b=getLinkedItems(item("link_M"))
for(i in 0..b.size()-1)
{ a[i] = b.getAt(i).toString().reverse().substring(0,1) }
total = 0
for(x in a) { total = total +","+x }
val = total.substring(2)
这是我的结果:
[b] = [java.util.ArrayList] [
Group:m.1:book1150:MGROUP.6/M/m.1,
Group:m.6:book1150:MGROUP.6/M/m.6,
Group:m.9:book1150:MGROUP.6/M/m.9]
[a] = [java.util.ArrayList] [1, 6, 9]
[total] = "0,1,6,9"
[val] = "1,6,9"
...但如果我的数组包含大于 9 的值,则不可行。
What can I do if my array is e.g.:
[b] = [java.util.ArrayList] [
Group:m.1:book1150:MGROUP.6/M/m.1,
Group:m.6:book1150:MGROUP.6/M/m.6,
Group:m.9:book1150:MGROUP.6/M/m.12]
我的结果应该是:
[val] = "1,6,12"
谁能帮帮我?我必须在哪里写,例如"lastIndexOf(".")" 或者谁有更好的解决方案?
提前致谢。
你在问题中的语法令人困惑,但假设你的意思是:
def list = [
'Group:m.1:book1150:MGROUP.6/M/m.1',
'Group:m.6:book1150:MGROUP.6/M/m.6',
'Group:m.9:book1150:MGROUP.6/M/m.12'
]
那么你可以这样做:
def val = list.collect { row -> row.findAll(/\d+/)[-1] }.join(',')
对于民丹岛集团的东西,试试:
def val = list.collect { row -> row.toString().findAll(/\d+/)[-1] }.join(',')
我会建议改用正则表达式,也许还可以使用一些基于 List
的混合插件。可能是这样的:
def b = getLinkedItems(item("link_M"))
def a = b.collect { (it.toString() =~ /\d+$/)[0] }
def val = a.join(",")
def total = "0," + val
在此,b.collect
为 b
的每个元素运行一次 Closure
,返回 List
个结果以分配给 a
.查找 (=~
) 运算符 returns 一个 Matcher
对象,它在源 String
在左侧。可以通过像 List
一样对 Matcher
进行索引来检索匹配的值。然后在下一行,a.join(",")
以 ,
作为分隔符将 a
的所有元素连接在一起。
正则表达式/\d+$/
表示:
\d+
一位或多位数字的任意子串$
源码结尾String