0

我找到了一个很好的解决方案,但不完全适合我的问题:

String s = "abc.def.ghfj.qert"; 
s.substring(s.lastIndexOf(".") + 1)

资料来源: Java:从特定字符后开始的字符串中获取子字符串

我必须在数组中使用它,但我不知道该怎么做......对不起。

我得到以下代码:

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(”。“)”或有人有更好的解决方案吗?

先感谢您。

4

2 回答 2

1

您在问题中的语法令人困惑,但假设您的意思是:

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(',')
于 2016-09-21T15:14:34.663 回答
0

我建议改用正则表达式,也许还可以使用一些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运行Closure一次后面的b,返回一个List结果以分配给a。find ( =~) 运算符返回一个对象,该对象在左侧的源中查找右侧(在本例中)Matcher正则表达式的所有实例。匹配的值可以通过像. 然后在下一行,将with的所有元素连接在一起作为分隔符。/\d+$/StringMatcherLista.join(",")a,

正则表达式的/\d+$/意思是:

  • \d+一位或多位数字的任何子串
  • $在源代码的末尾String
于 2016-09-21T15:33:22.637 回答