You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:35:07