2016-07-04 11 views
0

私は文字列のコレクションを持っており、正しくマスクされているかどうかを確認しています。文字列にScalaの文字が含まれているかどうかを調べる

これらはマップ内にあるので、テキスト値を引き出して確認しています。私はさまざまな組み合わせを試していますが、どれも私に必要な完成結果を与えてくれません。私はそれを各文字を反復処理して得たが、それは非常にjava-esqueと感じる。

私のコレクションは、何かのように: "テキスト" - > "テキスト" "テキスト" - > "** XT" "テキスト" - > "****" 最初の二つで

場合は、値がすべて星印されていないことを確認し、返すことができる別のリストに追加する必要があります。

編集 私の質問:値に「*」以外の値が含まれているかどうかを確認する必要があります。これは最も効率的なスカラ風の方法でどうすればよいでしょうか?

私の正規表現での試みは、多くの誤認を与えませんでした。そのような単純な作業のようです。正規表現を使用する方法がわからない場合は、パターンマッチングを使用する方法があるかどうかも疑問に思っています。

+0

あなたの質問は何ですか?文字列に文字が含まれているかどうかを調べるには、yourString.contains(yourChar)によって行われますが、そこにいくつか質問があるようですが、何も表示されません。 –

+0

@UlysseMizrahi、お散歩に申し訳ありません。明確にするために編集されました。 – null

+0

あなたはコレクションがマップだとは言っていますが、 "text" - > "text"、 "text" - > "xt"、 "text" - > "****"は 'Map'を記述しません。異なるデータ値を参照するために同じキーを使用することはできません。 – jwvh

答えて

1

私が正しく理解していれば、その価値はただの星ではありません。あなたは正規表現でこれを行うことができます。

val reg = "\\*+".r 
yourMap.filter{ case (k,v) => !reg.matches(v) }.keys 

あなたが正規表現と快適でないなら、あなたはFORALL文を使用することができます。

yourMap.filter{ case(k,v) => v.forall(_ == '*') }.keys 
2

!string.matches("\\*+")文字列以外の文字が含まれている場合を教えてくれます*

+0

string.matches( "[^ *] *") 'も同様に動作するはずです –

+0

@Łukaszno、これは星を一切含まない文字列にのみ一致します。 – Dima

+0

右、私の悪い:) –

1

おそらく、私はあなたの質問を誤解していますが、地図で開始した場合、あなたのような何かを試みることができる:ちょうどMap(1 -> "text")であなたに地図を与えるだろう

val myStrings = Map("1"-> "text", "2"-> "**xt", "3"-> "****") 
val newStrings = myStrings.filterNot(_._2.contains("*")) 

これを。

1

試してみてください。

val myStrings = Map("1"-> "text", "2"-> "**xt", "3"-> "****") 
val goodStrings = myStrings.filter(_._2.exists(_ !='*')) 

これは、マップ内の値がアスタリスク以外のものが含まれているすべてのケースを見つけました。すべての空白とアスタリスク専用の文字列が削除されます。このシンプルなもの、つまり1つのチェックの場合、正規表現は過大です。アスタリスク以外の文字を含む文字列を探しているだけです。

あなただけの値ではなく、全体のマップが必要な場合には、使用:

val goodStrings = myStrings.values.filter(_.exists(_ !='*')) 
関連する問題