[英]java.lang.NullPointerException with Scala regex
當我嘗試從sbt運行它時,我的scala項目中出現異常現象。
引發java.lang.NullPointerException的行是這樣的:
id <- urlReg.findFirstIn(line).map(_.split("/").lift(3))
它是一種理解:
for {
line <- Source.fromFile(fileName).getLines()
id <- urlReg.findFirstIn(line).map(_.split("/").lift(3))
dateString <- dateReg.findFirstMatchIn(line).map(_.group(1))
} yield {...}
當我在scala控制台上測試此行時,我發現findFirstIn
返回一個Option[String]
,因此它應該返回None
或Some[String]
並且永遠不會拋出java.lang.NullPointerException
。
這段代碼運行了一段時間而沒有引發異常,然后開始引發異常。
urlReg是val urlReg = "[GET,POST,DELETE,PUT]\\\\s{1}[\\\\w/]+".r
輸入的樣本行是
val sampleLine = """10.10.6.90 - - 15/Aug/2016:23:59:20 -0500 "GET /ecf8427e/b443dc7f/71f28176/174ef735/1dd4d421 HTTP/1.0" 200 - "-" "-" 7 "10.10.1.231, 10.10.6.90" -"""
我希望我的設置中有些不兼容。 我在跑步:
我還認為這是由於腳本中的函數2返回的某些Option [String]類型所致。
您是否考慮使用以下地圖/過濾器組合:
val faultyLine = """10.10.6.90 - - 15/Aug/2016:23:59:20 -0500 "GET /ecf8427eb443dc7f71f28176174ef7351dd4d421 HTTP/1.0" 200 - "-" "-" 7 "10.10.1.231, 10.10.6.90" -"""
val line= """10.10.6.90 - - 15/Aug/2016:23:59:20 -0500 "GET /ecf8427e/b443dc7f/71f28176/174ef735/1dd4d421 HTTP/1.0" 200 - "-" "-" 7 "10.10.1.231, 10.10.6.90" -"""
val lines = List(line,line,faultyLine)
lines.map(line => (urlReg.findFirstIn(line).map(_.split("/").lift(3))).match {
case Some(Some(a)) => a
case _ => null
}).filter( _ != null )
您應該能夠用flatMap替換地圖/過濾器,但是我沒有成功。 那應該簡化它並擺脫那里的丑陋的空值。
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.