Java:RegEx选项卡字符在行首处不起作用

时间:2015-04-02 08:53:27

标签: java regex csv

我正在将一些文件解析为我的Java程序。由于它的非csv / tsv性质,我想事先格式化,所以我可以轻松阅读它。为此我尝试了正则表达式,这对我来说很好,只有一个例外:行开头。

我的文件在每一行的开头都有一个标签,我想摆脱它,以便csv-parser可以正确地解析它们:

^ =仅在第一行\t =标签

String content = new String(Files.readAllBytes(path), charset);
content = content.replaceAll("^\t","");
Files.write(path, content.getBytes(charset));

奇怪的是,如果我将我的文件和上面的regExp放到http://myregexp.com/中,它会标记要删除的标签就好了。我进入调试器,但即使经过彻底搜索,也无法找到错误。我向两位经验丰富的Java程序员展示了代码,以减少问题完全无关紧要的可能性。

我已经从这个网站和其他网站搜索了一些示例,替换为空字符串""也没问题。此外,它在我的文件中的其他地方工作。似乎不是在行的开头。

3 个答案:

答案 0 :(得分:2)

要从每行的开头删除空格(空格/制表符),请使用MULTILINE标记:

content = content.replaceAll("(?m)^\\s+","");`

答案 1 :(得分:0)

^\tmultiline修饰符一起使用。

str.replace("(?m)^\t", "");

DEMO

答案 2 :(得分:0)

您不需要这种方法的正则表达式,您可以使用String.Trim()方法。

阅读中的行,并使用以下代码:

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
   String line;
   while ((line = br.readLine()) != null) {
      line = lines.trim();
      // Then, write to another file stream
   }
}

请参阅说明trim()的{​​{3}}。