web-dev-qa-db-ja.com

速度split()を使用して文字列を配列に分割することは機能していないようです

私は速度を嫌い、めったにそれを使用しませんが、時々私は仕事でそうするように求められます。使い方がわからない。

私はこれを持っています

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

$ browseSiteProductsは配列です。またはリスト。または何でも。私も知りません。 productIdの最初のアラートは正常に機能します。 「|」が表示されますこれは私が印刷したときに期待したものです。内側のループはそれを "|"で分割する必要があります区切り文字として、「内部ループ」のアラートを表示します。しかし、代わりに、productIdには24文字があるため、常に24のアラートを受け取ります。そのため、split()は私にとっては正しく区切りません。一体何が間違っているのですか?

カイルありがとう

13
kamcknig

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("[|]") )
15
Sergiu Dumitriu

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

4
Ithar
## Splitting by Pipes
#set($prodId = $product.productId)
#foreach($id in $prodId.split("[|]"))
$id
#end
1
Bae Cheol Shin

Vtlスクリプト内のこぼれた文字列::

foreach($ subString in $ yourString.split( '、'))

{"$ subString"} #if($ foreach.hasNext)、#end

終わりenter code here

enter image description here

0
Sekhar C