Java:RegExp制表符在行首不起作用
我正在把一些文件解析到我的Java程序中。由于它的非csv/tsv特性,我想事先格式化它,这样我就可以轻松地阅读它。为此,我尝试了正则表达式,它对我来说很好,只有一个例外:行的开始 我的文件在每一行的开头仍然有一个选项卡,我想去掉它,这样csv解析器就可以正确地解析它们:Java:RegExp制表符在行首不起作用,java,regex,csv,Java,Regex,Csv,我正在把一些文件解析到我的Java程序中。由于它的非csv/tsv特性,我想事先格式化它,这样我就可以轻松地阅读它。为此,我尝试了正则表达式,它对我来说很好,只有一个例外:行的开始 我的文件在每一行的开头仍然有一个选项卡,我想去掉它,这样csv解析器就可以正确地解析它们: ^=仅当行中第一个时,\t=选项卡 String content = new String(Files.readAllBytes(path), charset); content = content.replaceAll("^
^
=仅当行中第一个时,\t
=选项卡
String content = new String(Files.readAllBytes(path), charset);
content = content.replaceAll("^\t","");
Files.write(path, content.getBytes(charset));
奇怪的是,如果我把我的文件和上面的regExp放入,它会很好地标记要删除的选项卡。我进入调试器,但也找不到错误,即使在彻底搜索之后。我向两位经验丰富的Java程序员展示了代码,以降低问题完全无关紧要的可能性
我在这个网站和其他网站上搜索了一些例子,用空字符串替换也可以。此外,它在我档案中的其他地方也有用。只是不在行的开头。要删除每行开头的空白(空格/制表符),请使用多行标记:
content = content.replaceAll("(?m)^\\s+","");`
将^\t
与多行
修饰符一起使用
str.replace("(?m)^\t", "");
对于这类事情,您不需要正则表达式,您可以利用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()
@最后一个注意事项,它只会修剪整个文件的开头和结尾。@Jakob,行的开头和制表符之间可能有一个隐藏的空格。您可能应该使用模式
/匹配器
习惯用法并调试是否找到任何东西。如果没有,您可以在模式的行首和制表符之间添加一个通配符,将其分组,并将后面的引用打印为unicode代码点。也可以编辑关键答案。如果您已经看到第一个选项卡被替换,您可能会完全回答您的问题。@Mena-啊,我的错。。他正在同时阅读所有的东西。。所以你。。多行模式会有用的,真不敢相信我忘了那个+1我很快会测试这个,必须在其他atm上工作。到目前为止已经谢谢你了!至少你的想法对我来说是新的,所以我会投票表决。(好吧,我撒谎了,我还不能投票)效果很好,非常感谢!@karthik manchala也是一样,答案也是一样的。Ok看起来是合法的,但我并没有把所有代码都复制到这个问题上。尽管.trim()更适合我直接询问的问题,但我还是在下面几行中做了一些需要regexp的事情。谢谢,谢谢你的帮助,我也不知道修剪。