在Java中正则表达非法字符

时间:2013-07-31 08:58:15

标签: java regex illegal-characters

在经历了一次令人头疼的事情后,我一直在寻找互联网,无法找到这个正则表达式错误的原因:

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

我正在尝试使用以下模式读取主数据文件(包括引号):

"TEXTVALUE":"TEXTVALUE":"TEXTVALUE"

并用上面的正则表达式分割每一行。

所以,例如:

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

将分为:

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

2 个答案:

答案 0 :(得分:3)

反向斜杠是Java中的转义字符。您需要使用两个反斜杠\\在正则表达式中包含一个反斜杠。

尝试:

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

答案 1 :(得分:0)

确定。

感谢@ kevin-bowersox的帮助。

似乎Oracle在使用版本7改进Java方面做得很好。 使用此代码:

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

如果您的文件已使用常量patern格式化,例如:

"TEXTVALUE":"TEXTVALUE":"TEXTVALUE"

它的内容如下:

"TEXTVALUE-->TEXTVALUE-->TEXTVALUE"

其中' - >'代表制表符('\ t')

所以,最后,我的解决方案是:

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