2015-01-14 15 views
8

Czy można sprawdzić, czy ciąg znaków jest pusty lub pusty przy użyciu dopasowania?Dopasowywanie wzorców w celu sprawdzenia, czy ciąg znaków jest pusty lub pusty

Próbuję zrobić coś takiego:

def sendToYahoo(message:Email) ={ 
    val clientConfiguration = new ClientService().getClientConfiguration() 
    val messageId : Seq[Char] = message.identifier 
    messageId match { 
    case messageId.isEmpty => validate() 
    case !messageId.isEmpty => //blabla 
    } 
} 

ale mam błąd kompilacji.

Z góry dziękuję.

Odpowiedz

19

Możesz napisać prostą funkcję jak:

def isEmpty(x: String) = Option(x).forall(_.isEmpty) 

lub

def isEmpty(x: String) = x == null || x.isEmpty 

kupili także przyciąć ciąg, jeśli wziąć pod uwagę " " być pusty, jak również.

def isEmpty(x: String) = x == null || x.trim.isEmpty 

a następnie używać go

val messageId = message.identifier 
messageId match { 
    case id if isEmpty(id) => validate() 
    case id => // blabla 
} 

lub bez match

if (isEmpty(messageId)) { 
    validate() 
} else { 
    // blabla 
} 

lub nawet

object EmptyString { 
    def unapply(s: String): Option[String] = 
    if (s == null || s.trim.isEmpty) Some(s) else None 
} 

message.identifier match { 
    case EmptyString(s) => validate() 
    case _ => // blabla 
} 
+0

Dobry pomysł z przycinania! Jest tak często zapomniany. – Madoc

+0

'nie. istnieje == forall' – sschaef

+0

@sschaef wystarczy, dzięki, zaktualizowałem go. –

6
def isNullOrEmpty[T](s: Seq[T]) = s match { 
    case null => true 
    case Seq() => true 
    case _ => false 
} 
+0

projektantów języka Scala uczyniłoby nasze nubies Scala natury znacznie więcej łatwiejsze dzięki zapewnieniu isNu llable cecha metodą IsNull jak: def IsNull [T] (obj: T) = obj mecz { przypadek zerowy => true sprawa _ => false } –

Powiązane problemy