我为此浏览了不同的正则表达式文档,但我仍然没有得到它。我希望有人能够帮助我。
我有一张这样的表:
program 1 0 1 1 0 0 0 0 0 0 0 1
stmt_list 2 0 2 2 0 0 0 0 0 0 0 3
stmt 4 0 5 6 0 0 0 0 0 0 0 0
我想从文件中读取它并存储在数组中。我做了以下事情:
val source = io.Source.fromFile("file.txt").getLines.toList.mkString.split("\\W+")
我的输出如下:
program
1
0
1
1
0
0
0
0
0
0
0
1stmt_list // this is problem, int and string together which I don't want.
2
0
2
2
0
0
0
0
0
0
0
3stmt
4
0
.
.
.
我了解到\s
匹配任何空格,制表符或换行符。但是当我尝试时,我在scala error: invalid escape character
上收到错误。我尝试了许多其他步骤:" +"
,/\W+/
等。无效。我非常感谢任何帮助。我的目标是将文件读入只包含字符串和int值的2D数组。
答案 0 :(得分:1)
你的问题不是正则表达式本身,而是你"合并"使用mkString
将所有行分成一个字符串(使用map
),而不是分别对每一行进行操作:
val source = Source.fromFile("file.txt")
.getLines.toList // gets a list of file lines
.map(_.split("\\W+").toList) // maps each line into a list
source.foreach(println)
// List(program, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1)
// List(stmt_list, 2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 3)
// List(stmt, 4, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0)