2013-07-31 1 views
0

Я искал через интернет ап после большой головной боли, cannon't найти, почему это регулярное выражение неверно:Регулярного выражения недопустимые символы в Java

"\"\w*&&[\p{Punct}]\"["+sepChar+"]\"\w*&&[\p{Punct}]\"" 

Я пытаюсь прочитать основные данные файл со следующей схемой (включая котировки):

"TEXTVALUE":"TEXTVALUE":"TEXTVALUE" 

и разделите каждую строку на регулярное выражение выше.

Так, например:

"Hello:John":"Hello:World":"Hello:Mark" 

будет разбито на:

{"Hello:John", "Hello:World", "Hello:Mark"} 

ответ

3

В обратном слэш экранирующий символ в Java. Вам нужно использовать две обратные косые черты \\, чтобы включить одиночную обратную косую черту в регулярное выражение.

Try:

"\"\\w*&&[\\p{Punct}]\"["+sepChar+"]\"\\w*&&[\\p{Punct}]\"" 
+0

@Wolfchamane - да ты. Вы пытаетесь включить одну косую черту, чтобы избежать «w» ... например. –

+0

@Wolfchamane Это была моя ошибка - обратная косая черта. –

0

Ok.

Благодаря @ kevin-bowersox за помощью.

Похоже, что Oracle проделал большую работу, улучшающую Java с версией 7. С помощью этого кода:

File file = new File(someFile); 
BufferedReader br = new BufferedReader(file); 
String line = null; 
while((line = br.readLine()) != null){ 
    //todo 
} 

Если файл был отформатирован с постоянными патернами, например:

"TEXTVALUE":"TEXTVALUE":"TEXTVALUE" 

Он гласит:

"TEXTVALUE-->TEXTVALUE-->TEXTVALUE" 

где '->' означает вкладки ('\ т ')

Таким образом, в конце концов, мое решение:

public ArrayList getSplittedTextFromFile(String filePath) throws FileNotFoundException, IOException{ 
    ArrayList<String[]> ret = null; 
    if (!filePath.isEmpty()){ 
    File input = new File(filePath); 
    BufferedReader br = new BufferedReader(input); 
    String line = null; 
    while((line = br.readLine()) != null){ 
     String[] aSplit = line.split("\\t"); 
     if (ret == null) 
     ret = new ArrayList<>(); 
     ret.add(aSplit); 
    }//while 
    }//fi 
}//fnc