2017-10-21 26 views
1

我经历了不同的正则表达式文件,但我仍然没有得到它。我希望有人能够帮助我。斯卡拉正则表达式被多个空格和新行分割

我有一个表是这样的:

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+/等没有工作。我非常感谢任何帮助。我的目标是将文件读取到只有字符串和整数值的二维数组中。

回答

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) 
+1

我猜你不需要中间的.toList :) –

+0

虽然这取决于你想要对结果做什么 - 没有'toList','source'的类型为'Iterator [List [String]]'特别是不会改变'source.foreach(..)'的结果,但是如果你知道你需要一个'List [List [String]]',那么它是必需的。 –