从每行JAVA替换String的两个第一个字符的最佳方法

Ros*_*pin 2 java substring

我有一个大约300万行的文本文件,我需要用""替换每行的前两个字符.我目前的代码是

String[] lines = content.split("\n");
        content = "";
        for(int i = 0;i<lines.length;i++){
            System.out.println(i);
            lines[i].substring(2);
            content = content + lines[i];
        }
Run Code Online (Sandbox Code Playgroud)

完成需要3-4天左右.有更快的方法吗?

我的整个代码:

 try {
        String content = readFile("text.txt", StandardCharsets.ISO_8859_1);
        content = content.replaceAll("\\d","");
        content = content.replaceAll("\\.","");
        String[] lines = content.split("\n");
        content = "";
        for(int i = 0;i<lines.length;i++){
            System.out.println(i);
            lines[i].substring(2);
            content = content + lines[i];
        }
         PrintWriter out = new PrintWriter("texty text.txt");
        out.println(content);
    } catch (IOException e) {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 11

有更快的方法吗?

是 - 不要执行重复的字符串连接.那是影响你表现的部分.请StringBuilder改用.

它甚至没有做你想要的 - 你没有使用调用的结果substring.

我怀疑你想要这样的东西:

String[] lines = content.split("\n");
StringBuilder builder = new StringBuilder();
for (String line : lines) {
    builder.append(line.substring(2));
    // I suspect you want this, otherwise you're losing line breaks.
    builder.append("\n");
}
String result = builder.toString();
Run Code Online (Sandbox Code Playgroud)

此外,您应该考虑逐行读取文件而不是读取整个文件然后拆分它.例如:

StringBuilder builder = new StringBuilder();
try (BufferedReader reader = ...) {
    String line;
    while ((line = reader.readLine()) != null) {
        builder.append(line.substring(2));
        builder.append("\n");
    }
}
String result = builder.toString();
Run Code Online (Sandbox Code Playgroud)

除非你真的在任何时候都需要记忆中的所有内容,所以在处理它们时写下这些行:

try (BufferedReader reader = ...,
     BufferedWriter writer = ...) {
    String line;
    while ((line = reader.readLine()) != null) {
        // Perform any other manipulations here...
        writer.write(line.substring(2));
        writer.write("\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么要将整个内容读入内存?为什么要在内存中构建整个结果?只写出每一行? (2认同)

Tas*_*kos 5

为什么,为什么你在记忆中一下子读完整个shebang?只需从缓冲文件阅读器中读取一行,将一行写入缓冲文件编写器.