Java移除文本每行首字符(Z)失败:代码问题及解决需求
Java移除每行首字符Z的正确实现方法
问题场景
需要移除文本中每行开头的字符Z,文本行数不固定。
输入内容:
Z301052023KDE12 0000.062500000 0000.000000000 0000.000000000 Z301052023KDE11 0000.000000000 0000.000000000 0000.000000000
错误实现及问题
以下代码仅移除了第一行的Z,后续行的Z未被处理:
import java.util.*; import java.lang.*; import java.util.regex.*; class Rextester { public static void main(String args[]) { String inString = "Z301052023KDE12 0000.062500000 0000.000000000 0000.000000000 \n" + "Z301052023KDE11 0000.000000000 0000.000000000 0000.000000000"; inString = inString.replaceAll("^Z", ""); System.out.println(inString); } }
实际输出:
301052023KDE12 0000.062500000 0000.000000000 0000.000000000 Z301052023KDE11 0000.000000000 0000.000000000 0000.000000000
预期输出:
301052023KDE12 0000.062500000 0000.000000000 0000.000000000 301052023KDE11 0000.000000000 0000.000000000 0000.000000000
问题原因:默认情况下^仅匹配整个字符串的开头,而非每行开头,因此只能处理第一行的Z。
正确实现方法
方法1:使用正则多行模式
通过在正则表达式前添加(?m)启用多行模式,此时^会匹配每行的开头:
import java.util.*; import java.lang.*; import java.util.regex.*; class Rextester { public static void main(String args[]) { String inString = "Z301052023KDE12 0000.062500000 0000.000000000 0000.000000000 \n" + "Z301052023KDE11 0000.000000000 0000.000000000 0000.000000000"; // 启用多行模式,匹配每行开头的Z inString = inString.replaceAll("(?m)^Z", ""); System.out.println(inString); } }
方法2:逐行处理字符串
将字符串按行分割后,逐个处理每行并移除首字符,最后拼接回结果:
import java.util.*; import java.lang.*; class Rextester { public static void main(String args[]) { String inString = "Z301052023KDE12 0000.062500000 0000.000000000 0000.000000000 \n" + "Z301052023KDE11 0000.000000000 0000.000000000 0000.000000000"; // 按换行符分割字符串,保留空行 String[] lines = inString.split("\\n", -1); StringBuilder result = new StringBuilder(); for (String line : lines) { if (!line.isEmpty() && line.charAt(0) == 'Z') { // 移除首字符Z result.append(line.substring(1)); } else { // 空行或首字符不是Z的行直接保留 result.append(line); } result.append("\n"); } // 移除最后多余的换行符 if (result.length() > 0) { result.setLength(result.length() - 1); } System.out.println(result.toString()); } }
内容的提问来源于stack exchange,提问作者Nijith
相关产品推荐
相关产品推荐

