Java中使用正则表达式删除每行首字符失效问题
Java如何删除所有行的首字符?
需求:使用Java查找并删除所有行的首字符。
输入示例行:
Z301052023KDE12 0000.062500000 0000.000000000 0000.000000000 Z301052023KDE11 0000.000000000 0000.000000000 0000.000000000
你编写的Java代码:
public static void main(String args[]) { String inString = "Z302052023CFCL11 0000.000000000 249999.990 0999999990000.000000000 0000.000000000 0000.000000000 0000.000000000\n" + "Z302052023CFCL11 0000.000000000 249999.990 0999999990000.000000000 0000.000000000 0000.000000000 0000.000000000" ; String value = null; inString = inString.replaceAll("^.", ""); System.out.println(inString); }
运行后输出:
302052023CFCL11 0000.000000000 249999.990 0999999990000.000000000 0000.000000000 0000.000000000 0000.000000000 Z302052023CFCL11 0000.000000000 249999.990 0999999990000.000000000 0000.000000000 0000.000000000 0000.000000000
可以看到第二行的首字符并未被删除——原因是正则表达式^.默认仅匹配整个字符串的起始位置,而非每一行的开头。要让^匹配每一行的起始,需要启用正则的多行模式。
解决方法1:启用多行模式的正则
在正则前添加(?m)标记开启多行模式,此时^会匹配每一行的开头,$匹配每一行的结尾。修改后的代码如下:
public static void main(String args[]) { String inString = "Z302052023CFCL11 0000.000000000 249999.990 0999999990000.000000000 0000.000000000 0000.000000000 0000.000000000\n" + "Z302052023CFCL11 0000.000000000 249999.990 0999999990000.000000000 0000.000000000 0000.000000000 0000.000000000" ; inString = inString.replaceAll("(?m)^.", ""); System.out.println(inString); }
运行后输出会删除所有行的首字符:
302052023CFCL11 0000.000000000 249999.990 0999999990000.000000000 0000.000000000 0000.000000000 0000.000000000 302052023CFCL11 0000.000000000 249999.990 0999999990000.000000000 0000.000000000 0000.000000000 0000.000000000
解决方法2:按行分割处理
如果觉得正则不够直观,也可以将字符串按换行符分割成每行,逐个去掉首字符后再拼接回去:
public static void main(String args[]) { String inString = "Z302052023CFCL11 0000.000000000 249999.990 0999999990000.000000000 0000.000000000 0000.000000000 0000.000000000\n" + "Z302052023CFCL11 0000.000000000 249999.990 0999999990000.000000000 0000.000000000 0000.000000000 0000.000000000" ; String[] lines = inString.split("\\n"); StringBuilder resultBuilder = new StringBuilder(); for (String line : lines) { if (!line.isEmpty()) { // 去掉首字符并拼接 resultBuilder.append(line.substring(1)).append("\n"); } } // 移除最后多余的换行符 if (resultBuilder.length() > 0) { resultBuilder.setLength(resultBuilder.length() - 1); } System.out.println(resultBuilder.toString()); }
这种方法更灵活,适合需要对每行做额外处理的场景。
内容的提问来源于stack exchange,提问作者Nijith
相关产品推荐
相关产品推荐

