所有人都可以。下面的感覺就像是對Scala的不幸浪費。任何人都可以保存此代碼?任何人都可以在單行這個Scala代碼(最好是FP?)
val tokenSplit = token.split(":")(1)
val candidateEntityName = tokenSplit.substring(0,tokenSplit.length-1)
if(!candidateEntityName.equals(entityName)) removeEnd = true
所有人都可以。下面的感覺就像是對Scala的不幸浪費。任何人都可以保存此代碼?任何人都可以在單行這個Scala代碼(最好是FP?)
val tokenSplit = token.split(":")(1)
val candidateEntityName = tokenSplit.substring(0,tokenSplit.length-1)
if(!candidateEntityName.equals(entityName)) removeEnd = true
這是(你不需要使用equals
):
val removeEnd = token.split(":")(1).init != entityName
是的......當我處理Java包和Java示例時,重新確認自己的壞習慣。我聽說有很多Java的==和.equals字符串引起的錯誤,但從來沒有這種差別有用的情況。 –
應該是某物像:(另)
val removeEnd = !(token.split(":")(1).dropRight(1).equals(entityName))
或:使用正則表達式的
val removeEnd = !(token.split(":").last.dropRight(1).equals(entityName))
這實際上是做別的比原來的代碼。假設在執行代碼之前'removeEnd'是'true'。 – ziggystar
實際上我還有其他一些我沒有展示的東西,但是從3行到1的核心思想就在那裏。 –
一種不同的解決方案來匹配所述輸入。它也處理數據不符合預期的情況(您當然可以擴展您的正則表達式以滿足您的需求)。
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))
很好的答案,+1給我展示瞭如何在正則表達式中避免使用雙反斜槓。 –
是什麼代碼實際上完成?例如。爲什麼你需要一個removeEnd標誌? 'token'與'entityName'有什麼關係?你能提供一些輸入+預期輸出嗎?它會清理一些東西。 –
因爲字符串是0:是否「tokenSplit.substring(0,tokenSplit.length-1)」有什麼作用? –
@Stefan scala>「ASD」.substring(0,「ASD」.length-1) res0:java.lang.String = AS –