当前位置: 首页 > 知识库问答 >
问题:

只过滤大型txt文件中的可读字符

盖昀
2023-03-14

我有一个大的. txt文件,里面充满了可读和不可读的字符。我试图创建一个Java的程序,它可以创建一个新的. txt文件,只有以前的. txt文件中的可读字符。请帮我做这件事。任何代码都将不胜感激。我是新来Java。

共有1个答案

梁鸣
2023-03-14

如果可读u指的是从“a”到“z”以及从“1”到“9”的所有字符,则可以使用正则表达式过滤掉这些字符,如下所示:

public static String removeSpecialCharacters(String sentence) {
    //StringBuilder container to store all the data in
    StringBuilder stringB = new StringBuilder();
    //loop trough all the characters from the sentence
    for (char c : sentence.toCharArray()) {
        //only store characters that are equal to the below values
        if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == ' ' ) {
            stringB.append(c);
        }
    }
    return stringB.toString().toLowerCase();
}

您可以使用返回类型(字符串)追加到新的。txt容器。比方说,对于通过removeSpecialCharacters()方法从旧文件循环中读取的每一行,使用返回值并将其附加到新文件循环中。txt文件。

如果我们在读/写文件上读取标准的java文档,我们可以编译以下代码:

import static java.nio.file.StandardOpenOption.*;
import java.nio.file.*;
import java.io.*;


public class Main {

    public static void main(String[] args) {

        readFromFile();

    }

    private static void writeToFile(String line) {
        // Convert the string to a
        // byte array.
        byte data[] = removeSpecialCharacters(line).getBytes();
        Path p = Paths.get("/home/user/Desktop/outFile.txt");

        try (OutputStream out = new BufferedOutputStream(Files.newOutputStream(p, CREATE, APPEND))) {
            out.write(data, 0, data.length);
        } catch (IOException x) {
            System.err.println(x);
        }    
    }

    private static void readFromFile() {
        Path file = Paths.get("/home/user/Desktop/inFile.txt");
        try (InputStream in = Files.newInputStream(file);
            BufferedReader reader =
              new BufferedReader(new InputStreamReader(in))) {
            String line = null;
            while ((line = reader.readLine()) != null) {
                writeToFile(line +"\n");
            }
        } catch (IOException x) {
            System.err.println(x);
        }
    }

    public static String removeSpecialCharacters(String sentence) {
        //StringBuilder container to store all the data in
        StringBuilder stringB = new StringBuilder();
        //loop trough all the characters from the sentence
        for (char c : sentence.toCharArray()) {
            //only store characters that are equal to the below values
            if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == ' ' ) {
                stringB.append(c);
            }
        }
        return stringB.toString().toLowerCase();
    }
}
 类似资料:
  • 问题内容: 关于我的上一个问题,我发布了: 我必须阅读几个非常大的txt文件,并且必须使用多个线程或一个线程来执行此操作,具体取决于用户输入。 假设我有一个主要方法来获取用户输入,并且用户请求一个线程,并希望为该线程处理20个txt文件。我将如何完成?请注意,以下内容不是我的代码或其设置,而是“想法”的含义。 例: 因此,总而言之,我将如何用一个线程完成此任务? 有20个线程? 用户建议使用thr

  • 我一直在互联网上寻找帮助,但我找不到,所以我求助于发帖。 我有一个txt文件,格式如下 1/2 0 1/6 6/11 1/6 2/10 我需要读取这些单独的分数,并输入分子和分母的函数称为BigFraction(num,denom)。 我调用读取器并将其作为字符串输出。然后,我在空格上进行拆分,以获得作为字符串的各个分数,并将它们输入到我的助手方法strToBF中,该方法在正斜杠上进行拆分,并输入

  • 问题内容: 我会尽量保持清楚,但如果我的问题不完美,请原谅我。我有一个包含多行数据的txt文件。例: 123拉尔夫·玻色20000 200 1 2 256 ed shane 30000 100 2 4 … 我需要按顺序读取每一行,并将其传递回单独类中的方法进行处理。我知道如何通过使用StringTokenizer将每一行分解为元素。 但是,我不确定如何一次读取一行,将元素传递回另一类,然后在完成处

  • 问题内容: 我打开 记事本 (Windows)并编写 并转到“ 另存为… ”“ someFile.txt”,并将“ 编码” 设置为 UTF-8 。 在Java中,我有 但是我得到问号和类似的“特殊”字符。为什么? 编辑: 我有此输入(.txt文件中的一行) 和这段代码 和 吐司 输出(用于那些谁不熟悉与Android,吐司只是一个显示弹出式屏幕,在它特定的文本法)的罚款。控制台显示“奇怪的字符”(

  • 我可以使用Apache POI只读取Excel文件的第一行吗?我不想读取整个文件,因为它有50,000行,读取最多需要10分钟(性能是一场灾难)。我通过文件上传获取字节。我的选项是字节数组或InputStream。现在我正在这样做:

  • 我正试图编写一个程序,读取网络中相互交互的节点列表。它以以下格式写入文本文件: 这表示节点1与节点2和节点3交互,节点2仅与节点3交互,等等。 该程序将能够读取该文件,并将删除任何重复的交互,并且如果我输入节点的名称,将能够向我返回节点与其他节点的交互次数。然而,我对Java非常陌生,我首先尝试让它读入文件,尽管我的代码目前没有读入文件。以下是我迄今为止的代码: 任何关于如何解决此问题的帮助都将不