我想将较长的字符串“分解”为较小的字符串,并将结果存储在单独的变量中。我的意思是:
// my string to split
val fileName: String = '15_data_doc1-financial-aspects_20190105_101000_c_from-another-department.csv
// split into smaller variables...
val number = 15
val type = "data"
val doc = "doc1"
...
最好一步一步地完成,例如:1)在字符串上应用一些正则表达式并将结果保存到新变量中2)保存字符串的尾部并应用进一步的正则表达式逻辑创建下一个变量。
哪种解决方案最容易达成目标?模式匹配,尾部递归,只是在每个操作之后创建一个辅助变量?通常,我会使用'split'方法,但是在这种情况下,用于分割目的的字符很少。
欢迎任何建议。
答案 0 :(得分:3)
如果不能使用插值字符串模式(Scala 2.13.0),则可以构建正则表达式来描述分解模式。
val fileName: String =
"15_data_doc1-financial-aspects_20190105_101000_c_from-another-department.csv"
val FNPattern = "([^_]+)_([^_]+)_([^-]+)-([^.]+)\\.(.+)".r
fileName match {
case FNPattern(number, tpe, doc, rest, ext) => s"$number, $tpe, $doc, $ext"
}
//res0: String = 15, data, doc1, csv
答案 1 :(得分:2)
尝试KrzysztofAtłasik建议的interpolated string patterns
"15_data_doc1-financial-aspects_20190105_101000_c_from-another-department.csv" match {
case s"${number}_${filetype}_${doc}" => // use number, filetype, doc, etc. variables
}