8

文字列に特殊文字が含まれているかどうかを確認するために、次のコードを作成しました。コードは私には複雑すぎるように見えますが、簡単にする方法がわかりません。何か案は?

def containsNoSpecialChars(string: String): Boolean = {
  val pattern = "^[a-zA-Z0-9]*$".r
  return pattern.findAllIn(string).mkString.length == string.length
}                                                 //> containsNoSpecialChars: (string: String)Boolean

containsNoSpecialChars("bl!a ")                   //> res0: Boolean = false
containsNoSpecialChars("bla9")                    //> res1: Boolean = true
4

3 に答える 3

17

これは Java 文字列を使用します。

word.matches("^[a-zA-Z0-9]*$")

または、正規表現を扱いたくない場合は、次のいずれかを使用して Scala の RichString を利用できます。

word.forall(_.isLetterOrDigit)

また:

!word.exists(!_.isLetterOrDigit)
于 2013-10-31T11:15:06.337 に答える
12
scala> val ordinary=(('a' to 'z') ++ ('A' to 'Z') ++ ('0' to '9')).toSet
ordinary: scala.collection.immutable.Set[Char] = Set(E, e, X, s, x, 8, 4, n, 9, N, j, y, T, Y, t, J, u, U, f, F, A, a, 5, m, M, I, i, v, G, 6, 1, V, q, Q, L, b, g, B, l, P, p, 0, 2, C, H, c, W, h, 7, r, K, w, R, 3, k, O, D, Z, o, z, S, d)

scala> def isOrdinary(s:String)=s.forall(ordinary.contains(_))
isOrdinary: (s: String)Boolean


scala> isOrdinary("abc")
res4: Boolean = true

scala> isOrdinary("abc!")
res5: Boolean = false

論理的に正しい選択であるセットを使用しましたが、ごちゃごちゃした文字を見ないようにするベクターでも機能するはずです...

于 2013-11-03T14:43:53.137 に答える
7
def containsNoSpecialChars(string: String) = string.matches("^[a-zA-Z0-9]*$")
于 2013-11-03T15:04:54.153 に答える