2014-03-17 4 views
0

Я хочу разбирать почти программу. Программа состояла из двух линий и показано ниже:Разделительные линии регулярного выражения в Java

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" 

И поэтому все пустые слова, теперь исчезли. Вы знаете, как я могу вернуть их? Мне нужно, чтобы быть в соответствии с библиотекой ...

Благодаря

+0

Я думаю, что я хотел бы использовать лексер, а не регулярное выражения для этого, но это может отражать только свои собственные предубеждения ... – keshlam

+0

Вы ночью хочет прочитать о какие _character classes_. – devnull

ответ

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]); 
    } 
} 
2

Во-первых, ваше разделенное регулярное выражение - гигантская ошибка. Это выражение:

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

означает любое один символ, который является одним из:

  • пробельных
  • плюс знак +
  • труба полукокса |
  • не-слово полукокса (включая пробелы)

Это должно быть просто:

"\\W" 

Кроме того, если добавить дополнительный параметр к раздельному вызову (см javadoc, почему), вы получите задние пустые термины расщепленных.

Это производит вывод, который вы хотите:

allLines[i].split("\\W", -1) 
Смежные вопросы