【问题标题】:Given a .txt file, I need to lower case and remove punctuation给定一个 .txt 文件,我需要小写并删除标点符号
【发布时间】:2014-03-13 00:54:57
【问题描述】:

我正在处理一个更大的团队项目的一小部分。在此范围内,我将接收一个文本文件并将其转换为更易于压缩的文本文件。为此,我将降低所有大写单词以及用空格替换标点符号(即“”)。我感谢所有 cmets 和推荐。

import java.io.*;
public class Formatter
{

    public static void main (String[] args) throws IOException
    {
        String nonChar = ".,:;!@#$%^&*()_-=+[]\"'<>";
        File f1 = new File("iTest.txt");
        File f2 = new File("oTest.txt");
        BufferedReader in = (new BufferedReader(new FileReader(f1)));
        PrintWriter out = (new PrintWriter(new FileWriter(f2)));

        int ch;
        while ((ch = in.read()) != -1)
        {
            if (Character.isUpperCase(ch))
            {
                ch = Character.toLowerCase(ch);
            }
            else if (in.contains(Character[ch]))//tried character
            {
                ch = ' ';
            }
            out.write(ch);
        }

        in.close();
        out.close();

    }
}

理想情况下,如果有的话

彼得·派珀摘了一小撮泡椒; 彼得·派珀摘下的一小撮泡椒; 如果彼得派博摘了一小撮泡椒, Peter Piper 采摘的泡椒在哪里?

它会返回

彼得·派珀摘了一小撮泡椒 一小撮泡椒彼得·派珀采摘 如果彼得派珀摘了一小撮泡椒 泡椒彼得派珀在哪里采摘的

【问题讨论】:

  • 问题是什么?

标签: java


【解决方案1】:

逐行读取String并执行操作:

BufferedReader in = (new BufferedReader(new FileReader(f1)));
String line;
String processedLine="";
while ((line = in.readLine()) != null) {
    processedLine = line.replaceAll("[^a-zA-Z0-9]"," ").toLowerCase().replaceAll("( )+", " ");
    out.write(processedLine);
    out.write(System.getProperty("line.separator"));
}

注意:如果文本包含一些独特的字符(重音字符),例如é等,您可以使用line.replaceAll("(?U)[^\\p{Alnum}]"," ")

【讨论】:

  • 为了支持像“é”这样的字符,您可以使用"(?U)[^\\p{Alnum}]" 或仅使用"(?U)[^\\w]" 而不是"[^a-zA-Z0-9]"。此外,虽然它可以用于简单输入,但对于大型输入,您需要使用 StringBuilder 进行字符串追加。
【解决方案2】:

您只需几行即可完成此操作

String text;
BufferedReader in = (new BufferedReader(new FileReader(f1)));
text = in.readLine();
text = text.replaceAll("[^\\w\\s\\ ]", " ").toLowerCase();

如果文本只有一行,这将起作用,如果它是多行,则只需循环上面的代码。

【讨论】:

    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 2023-01-03
    • 2018-03-24
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多