私は速度を嫌い、めったにそれを使用しませんが、時々私は仕事でそうするように求められます。使い方がわからない。
私はこれを持っています
#foreach( $product in $browseSiteProducts )
alert("$product.productId");
#foreach( $stringList in $product.productId.split("|") )
alert("inner loop");
#end
#end
$ browseSiteProductsは配列です。またはリスト。または何でも。私も知りません。 productIdの最初のアラートは正常に機能します。 「|」が表示されますこれは私が印刷したときに期待したものです。内側のループはそれを "|"で分割する必要があります区切り文字として、「内部ループ」のアラートを表示します。しかし、代わりに、productIdには24文字があるため、常に24のアラートを受け取ります。そのため、split()は私にとっては正しく区切りません。一体何が間違っているのですか?
カイルありがとう
Velocityには、それ自体のオブジェクトとメソッドはほとんどありません。代わりに、本当のJavaオブジェクトを操作し、それらのオブジェクトで本当のJavaメソッドを呼び出すことができます。区切り文字が文字列であると記載されているVelocityドキュメントはどれですか?
さらに、VelocityはJavaベースであるため、string
は、電話番号、名前、識別子、正規表現など、さまざまなタイプの情報を保持できるデータ型にすぎません... Javaでは、正規表現を処理する多くのメソッドそれらのREをString
オブジェクトとして渡します。
変数の背後にある値が持つ実際の型は、そのクラス名を出力することで確認できます。
Product class is $product.class
Product ID class is $product.productId.class
製品IDが実際に Java.lang.String
の場合、 split
メソッド がString
パラメータを取ることを確認できますが、その文字列は有効な正規表現であることが期待されています。
それ以来 - |
は正規表現の特殊文字です 、どうにかしてエスケープする必要があります。これは機能します:
#foreach( $stringList in $product.productId.split("[|]") )
StringUtilsを使用せずに、これはString split()
メソッドを使用して実行できます。
これとは異なり、Java特殊文字の対応物とは異なり、@ kamcknigが正しく述べているように、スラッシュをエスケープする必要はありません(例:_"\\|"
_):
_#set ($myString = “This|is|my|dummy|text”)
#set ($myArray = $myString.split("\|")) or
#set ($myArray = $myString.split('\|')) or
#set ($myArray = $myString.split("[|]"))
_
注1:配列のサイズを取得するには、次のようにします。$myArray.size()
注2:実際の値を取得するには、$myArray.get(0)
または_$myArray[0]
_…などを使用します
推奨:事前に使用できます#if ($myString.indexOf(‘|’)) ... #end
## Splitting by Pipes
#set($prodId = $product.productId)
#foreach($id in $prodId.split("[|]"))
$id
#end