2017-08-10 48 views
0

我需要寫一個Spark Scala代碼來拆分字符串。我的分隔符是雙管(||)。如果最後一個字段爲空,分割會給出ArrayIndexOutOfBoundsException。有人可以幫我解決這個問題。僅當最後一個字段爲空時,纔會發生此問題。這裏是我的代碼:scala拆分雙管道(||)不打印最後一列如果爲空

val str1 = "one||two||three||" 
val splitfields1 = str1.split("\\|\\|") 
println(splitfields1(2)) 

//output : three 

val str2 = "one||||three||" 
val splitfields2 = str2.split("\\|\\|") 
println(splitfields2(2)) 
println(splitfields2(1)) 
// output1 : three 
// output2 : Empty line 

val str3 = "one||two||||" 
val splitfields3 = str3.split("\\|\\|") 
println(splitfields3(2)) 
// Error : java.lang.ArrayIndexOutOfBoundsException: 2 
// I expected field number 2 will have null/empty string and wont give outofbound exception 

splitfields3.foreach { println } 
//Output : one 
      two 
//Here it is not printing empty line 

如何解決這個問題。我從文件中獲取輸入,所以它可以在任何位置都有空字段。

+1

https://stackoverflow.com/questions/27689065/how-to-split-string-with-trailing-empty-strings-in-result –

回答

0

請嘗試

val splitfields3 = str3.split("\\|\\|",-1) 
+0

您可能要添加一些解釋什麼是額外參數'-1'的文本。 – philantrovert

+0

您最好解釋一下您的解決方案,而不是發佈一些匿名代碼部分。你應該閱讀[我如何寫一個好的答案](https://stackoverflow.com/help/how-to-answer),以及[完全解釋基於代碼的答案](https://meta.stackexchange.com /問題/ 114762 /解釋-entirely-%E2%80%8C%E2%80%8Bcode基於-答案)。 –

+0

對不起,在手機中很難格式化代碼。關於-1的含義,我認爲提問者可以參考API文檔。 – Robin