2016-09-21 8 views
0

ich eine gute Lösung, aber nicht genau das gefunden Java: Getting a substring from a string starting after a particular characterinnerhalb eines Arrays String zurückgeben

Das muss ich es verwenden, innerhalb eines Arrays, aber ich habe keine Ahnung, wie es geht ... tut mir leid.

Ich habe den folgenden Code:

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) 

Das ist mein Ergebnis ist:

[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" 

... aber es ist nicht möglich, wenn mein Array einen Wert von mehr als 9

enthält
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] 

und mein Ergebnis sollte sein:

[val] = "1,6,12" 

Wer kann mir helfen? Wo muss ich z. "lastIndexOf (". ")" oder hat jemand eine bessere Lösung?

Vielen Dank im Voraus.

Antwort

0

Ich würde stattdessen die Verwendung von regulären Ausdrücken empfehlen, und vielleicht einige List -ba sed mix-ins für ein gutes Maß. So etwas wie dieses vielleicht:

def b = getLinkedItems(item("link_M")) 
def a = b.collect { (it.toString() =~ /\d+$/)[0] } 
def val = a.join(",") 
def total = "0," + val 

Dabei b.collect läuft die Closure, die einmal für jedes Element von b folgt, eine List der Ergebnisse der Rückkehr in a zuzuweisen. Der Operator find (=~) gibt ein Objekt Matcher zurück, das alle Instanzen des regulären Ausdrucks rechts (/\d+$/ in diesem Fall) innerhalb der Quelle String auf der linken Seite findet. Die übereinstimmenden Werte können von der Matcher abgerufen werden, indem sie wie eine List indexiert wird. Dann in der nächsten Zeile, a.join(",") verbindet alle Elemente von a mit , als Trennzeichen.

Der reguläre Ausdruck /\d+$/ Mittel:

  • \d+ jeder Teilkette aus einer oder mehreren Ziffern
  • $ am Ende der Quelle String
+0

GREAT !! Das ist genau das, was ich brauche. Danke soooo viel! :-) Dies ist mein gewünschtes Ergebnis von val: Return Wert: "1,6,12" – PegasusTT77

+0

Großartig, froh zu helfen. Nicht aufdringlich zu sein, aber wirst du meine Antwort dann auswählen? – BalRog

+1

Du bist nicht aufdringlich, ich bin neu und habe die Anleitung zur Auswahl der richtigen Antwort nicht vollständig gelesen ... – PegasusTT77

1

Ihre Syntax in der Frage ist verwirrend, aber vorausgesetzt, Sie bedeuten, Sie haben:

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' 
] 

dann können Sie einfach tun:

def val = list.collect { row -> row.findAll(/\d+/)[-1] }.join(',') 

Für die bintan Gruppe Zeug, versuchen:

def val = list.collect { row -> row.toString().findAll(/\d+/)[-1] }.join(',') 
+0

Meine Syntax korrekt war kopiert. Wenn ich Ihren Code versuche, erhalte ich folgende Antwort: Fehler: Keine Signatur der Methode: bintan.form.Group.findAll() gilt für Argumenttypen: (java.lang.String) Werte: [\ d +] – PegasusTT77

+0

WTH ist 'bintan.form.Group'? –

+0

Ich würde vermuten, dass "bintan.form.Group" der tatsächliche Typ ist, der von seiner Methode "getLinkedItems" zurückgegeben wird, da dies der einzige Ort ist, an dem ein "findAll" in Ihrem Code verwendet wird. – BalRog

Verwandte Themen