2013-11-21 43 views
2

所有人都可以。下面的感覺就像是對Scala的不幸浪費。任何人都可以保存此代碼?任何人都可以在單行這個Scala代碼(最好是FP?)

val tokenSplit = token.split(":")(1) 
    val candidateEntityName = tokenSplit.substring(0,tokenSplit.length-1) 
    if(!candidateEntityName.equals(entityName)) removeEnd = true 
+3

是什麼代碼實際上完成?例如。爲什麼你需要一個removeEnd標誌? 'token'與'entityName'有什麼關係?你能提供一些輸入+預期輸出嗎?它會清理一些東西。 –

+0

因爲字符串是0:是否「tokenSplit.substring(0,tokenSplit.length-1)」有什麼作用? –

+0

@Stefan scala>「ASD」.substring(0,「ASD」.length-1) res0:java.lang.String = AS –

回答

2

這是(你不需要使用equals):

val removeEnd = token.split(":")(1).init != entityName 
+0

是的......當我處理Java包和Java示例時,重新確認自己的壞習慣。我聽說有很多Java的==和.equals字符串引起的錯誤,但從來沒有這種差別有用的情況。 –

2

應該是某物像:(另)

val removeEnd = !(token.split(":")(1).dropRight(1).equals(entityName)) 

或:使用正則表達式的

val removeEnd = !(token.split(":").last.dropRight(1).equals(entityName)) 
+0

這實際上是做別的比原來的代碼。假設在執行代碼之前'removeEnd'是'true'。 – ziggystar

+0

實際上我還有其他一些我沒有展示的東西,但是從3行到1的核心思想就在那裏。 –

2

一種不同的解決方案來匹配所述輸入。它也處理數據不符合預期的情況(您當然可以擴展您的正則表達式以滿足您的需求)。

val removeEnd = """<(\w+):(\w+)>""".r.findFirstMatchIn(token).map(!_.group(2).equals(entityName)).getOrElse(throw new Exception(s"Can't parse input: $token")) 

如果你想默認爲假:

val removeEnd = """<(\w+):(\w+)>""".r.findFirstMatchIn(token).exists(!_.group(2).equals(entityName)) 
+0

很好的答案,+1給我展示瞭如何在正則表達式中避免使用雙反斜槓。 –

相關問題