2014-01-22 9 views
9

Ich hasse Geschwindigkeit und verwende sie selten, aber manchmal werde ich bei meiner Arbeit dazu aufgefordert. Ich kann nie wirklich herausfinden, wie man es benutzt.Die Verwendung von velocity split() um einen String in ein Array zu teilen, scheint nicht zu funktionieren

Ich habe diesen

#foreach($product in $browseSiteProducts) 
    alert("$product.productId"); 
    #foreach($stringList in $product.productId.split("|")) 
     alert("inner loop"); 
    #end 
#end 

$ browseSiteProducts ein Array ist. Oder Liste. Oder Wasauchimmer. Ich weiß es nicht einmal. Die erste Warnung der productId funktioniert einwandfrei. Ich bekomme "|" was ich erwartet habe, als ich es ausgedruckt habe. Die innere Schleife sollte dann das auf dem "|" als Trennzeichen und gib mir Warnungen von "innerer Schleife". Stattdessen erhalte ich immer 24 Warnungen, weil die productId 24 Zeichen enthält. so split() grenzt mich nicht korrekt ab. Was zum Teufel mache ich falsch?

Dank Kyle

Antwort

8

Geschwindigkeit extrem wenige Objekte und Methoden seines eigenen hat. Stattdessen können Sie mit echten Java-Objekten arbeiten und für diese Objekte echte Java-Methoden aufrufen. Welche Velocity-Dokumentation besagt, dass das Trennzeichen eine Zeichenfolge ist? Da Velocity Java-basiert ist, ist string nur ein Datentyp, der viele Arten von Informationen enthalten kann: Telefonnummern, Namen, Bezeichner, reguläre Ausdrücke ... In Java gibt es viele Methoden, die reguläre Ausdrücke behandeln diese REs als String Objekte.

Sie können die tatsächlichen Typ überprüfen, die einen Wert hinter einer Variablen durch den Druck seiner Klassennamen hat:

Product class is $product.class 
Product ID class is $product.productId.class 

Wenn die Produkt-ID ist in der Tat ein java.lang.String, dann können Sie prüfen, ob the split method nimmt einen String Parameter, aber Es wird erwartet, dass String ein gültiger regulärer Ausdruck ist.

Und seit | is a special character in regular expressions, müssen Sie es irgendwie entkommen. Dies funktioniert:

#foreach($stringList in $product.productId.split("[|]")) 
-2

Offenbar obwohl die Geschwindigkeit Dokumentation sagt, dass der Begrenzer ein String es ist wirklich ein regulärer Ausdruck. Danke Apache.

richtige Weg ist

$product.product.split("\|"); 
+0

Aber Sie verwenden nicht die StringUtils-Klasse.Warum beanstanden Sie die Apache-Dokumentation für eine Klasse, die Sie nicht verwenden? Ihr Beispiel verwendet lediglich die java.util.String-Split-Methode. –

1
## Splitting by Pipes 
#set($prodId = $product.productId) 
#foreach($id in $prodId.split("[|]")) 
$id 
#end 
3

Ohne Verwendung StringUtils kann dies die Zeichenfolge split() Methode durchgeführt werden.

Anders als es ist Java Pendant für Sonderzeichen braucht man nicht den Schrägstrich zu entkommen (.eg "\\|") als @kamcknig korrekt angegeben:

#set ($myString = “This|is|my|dummy|text”) 

#set ($myArray = $myString.split("\|")) or 
#set ($myArray = $myString.split('\|')) or 
#set ($myArray = $myString.split("[|]")) 

Anmerkung 1: Um die Größe der Arrays Verwendung zu erhalten : $myArray.size()

Hinweis 2: Ist-Werte $myArray.get(0) oder $myArray[0] benutzen Sie ... etc

Vorschlag: eine vorher nutzen könnten#if ($myString.indexOf(‘|’)) ... #end