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.collectb 的每个元素运行一次 Closure,返回 List 个结果以分配给 a .查找 (=~) 运算符 returns 一个 Matcher 对象,它在源 String 在左侧。可以通过像 List 一样对 Matcher 进行索引来检索匹配的值。然后在下一行,a.join(","), 作为分隔符将 a 的所有元素连接在一起。

正则表达式/\d+$/表示:

  • \d+一位或多位数字的任意子串
  • $ 源码结尾String