在Java中拆分行正则表达式

时间:2014-03-17 01:34:41

标签: java regex split

我想解析一个差不多的程序。该程序由两行组成,如下所示:

java.io.*;
java.lang.*;

我正在使用一个库,它读取整个程序并使用命令

将其拆分
String[] words = sourceCode.split("[\\s+|\\W+]");

由此产生的是以下

words[0] = "Java"
words[1] = "io"
words[2] = ""
words[3] = ""
words[4] = ""
words[5] = ""
words[6] = Java
words[7] = "lang"
words[8] = ""
words[9] = ""
words[10] = ""
words[11] = ""

然而,我想要的是首先在行中打破该程序,然后在行的组件中打破该程序。也就是说,我正在使用

String[] allLines = file1String.split("[\n]");
String[][] wordsOfALine =new String[allLines.length][];
for (int i=0;i<allLines.length;i++){
       wordsOfALine[i] = allLines[i].split("[\\s+|\\W+]").clone();
}

然而,我在这里得到的是

wordsOfALine[0][0] = "Java"
wordsOfALine[0][1] = "io"
wordsOfALine[1][0] = "Java"
wordsOfALine[1][1] = "lang"

因此所有空话现在都消失了。你知道我怎么能把他们带回去吗?我需要与图书馆保持一致......

由于

2 个答案:

答案 0 :(得分:2)

首先,你的分裂正则表达式是一个巨大的错误。这个表达式:

"[\\s+|\\W+]"

表示任何单个字符,它是以下之一:

  • 空白
  • 加号+
  • 管道字符|
  • 非单词字符(包括whitespace btw)

应该只是:

"\\W"

此外,如果您为拆分调用添加额外参数(请参阅javadoc了解原因),您将获得尾随空白拆分条款。

这会产生您想要的输出:

allLines[i].split("\\W", -1)

答案 1 :(得分:0)

尝试以下操作并根据需要进行修改。

String[] allLines = file1String.split("[\n]");
String[] wordsOfALine = {};
int k = 0;
for (int i=0 ;i<allLines.length;i++){
   String[] words= allLines[i].split("[\\r\\n]+]");
   for(int j = 0; j < lines.length; j++){
      wordsOfALine[k++] : " + words[j]);
   }
}