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

替换文件中的多个字符

叶鸿煊
2023-03-14

我想在文本文件中用新的英文字符替换突厥语字符{code>{c',c',I',I',G',G',S',S}。

这是我的密码。我在控制台上只获得原始内容,没有任何更改,也不会创建新文件。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Replace {

    String line = null;
    String ret = null;

    public void doIt() {
        try {

            File f1 = new File("C:\\Users\\PC\\Desktop\\new-words2.txt");
            FileOutputStream fop = new FileOutputStream(f1);
            FileReader fr = new FileReader(f1);
            BufferedReader br = new BufferedReader(new 
            FileReader("C:\\\\Users\\\\PC\\\\Desktop\\new-words.txt"));

            FileWriter fw = new FileWriter(f1);
            BufferedWriter out = new BufferedWriter(fw);

            while ((line = br.readLine()) != null) {
                char[] turkishChars = new char[] { 'ç', 'Ç', 'İ', 'ı', 'Ğ', 'ğ', 'Ş', 'ş' };
                char[] englishChars = new char[] { 'c', 'C', 'I', 'i', 'G', 'g', 'S', 's' };
                for (int i = 0; i < turkishChars.length; i++) {
                    ret = ret.replaceAll(new String(new char[] { turkishChars[i] }),
                            new String(new char[] { englishChars[i] }));
                    out.write(ret);
                }
            }

            fr.close();
            br.close();
            out.flush();
            out.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String args[]) {
        Main1 fr = new Main1();
        fr.doIt();

    }
}

编辑:

这是适用于我的新代码。但是我想使用一个较短的代码来替换方法。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Replace {

    String line = null;
    String ret = null;

    public void doIt() {
        try {

            File f1 = new File("C:\\Users\\PC\\Desktop\\new-words2.txt");
            FileOutputStream fop = new FileOutputStream(f1);
            FileReader fr = new FileReader(f1);
            BufferedReader br = new BufferedReader(new 
            FileReader("C:\\Users\\PC\\Desktop\\new-words.txt"));

            FileWriter fw = new FileWriter(f1);
            BufferedWriter out = new BufferedWriter(fw);

            while ((line = br.readLine()) != null) {
                ret = line.replace("ç", "c").replace("Ç", "C").replace("İ", "I").replace("ı", "i").replace("Ğ", "G")
                        .replace("ğ", "g").replace("Ş", "S").replace("ş", "s");
                out.write(ret + "\n");
            }

            fr.close();
            br.close();
            out.flush();
            out.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String args[]) {
        Replace fr = new Replace();
        fr.doIt();

    }
}

共有1个答案

颜高格
2023-03-14

我对这个主题知之甚少,但您的程序是否会因为4个反斜杠而检测不到br FileReader路径?将它们更改为两个(FileReader(“C:\\Users\\PC\\Desktop\\new words.txt”),然后重试。也许这会有所帮助。

 类似资料:
  • 我有一个文件,其中包含以下格式的正则表达式和替换文字字符串列表: 我想替换所有匹配的字符串与在多个文件。 我相信这是一个常见的问题,以前应该有人做过类似的事情,但我就是找不到用bash编写的现有解决方案。 例如: 输入: 预期产出: 主要挑战是: 要替换的字符串由POSIX扩展正则表达式描述,而不是文字,任何不是POSIX ERE元字符的字符,包括经常被一些工具用作regexp分隔符的,都必须被视

  • 问题内容: 一个非常简单的小问题,但是我不太明白该怎么做。 我需要将’_’的每个实例替换为空格,并将’#’的每个实例替换为空/空。 我已经试过了: 我真的不喜欢这样的链接命令。还有另一种方法可以做到这一点吗? 问题答案: 使用OR运算符(): 您还可以使用字符类: Fiddle 如果您想用一件事替换哈希值,而用另一件事替换下划线,则只需要链接即可。但是,您可以添加一个原型: 但是为什么不连锁呢?我

  • 我真的不喜欢这样链接命令。有没有另一种方法在一个做?

  • 问题内容: 我正在寻找一种替换文件中的字符串而不将整个文件读入内存的方法。通常我会使用Reader和Writer,例如以下内容: 但是,我想就地进行替换,并且不认为可以同时在同一文件上打开Reader和Writer。另外,我正在使用Java 1.4,因此无法访问NIO,扫描仪等。 谢谢唐 问题答案: 通常无法对文件进行“就地”替换,除非替换的长度与原始长度完全相同。否则,文件将需要增大,从而将所有

  • 问题内容: 我有两个文件。其中一个定义了一组数字-值对,如下所示( fileA ): 另一个文件包含一堆值配对,如下所示( fileB ): 我想编写一个脚本,用文件A中的对应数字替换文件B中的值。生成新文件还是更改现有文件B都没有关系。 有任何想法吗?谢谢 问题答案: NR == FNR {a [$ 2] = $ 1; next} =>处理fileA时为true。形成一个关联数组,其中索引是第二

  • 问题内容: 我只需要访问服务器,就需要替换文件夹中许多文件中的字符串。我怎样才能做到这一点? 问题答案: 出现的“ foo”将替换为“ bar”。 在macOS之类的BSD系统上,您需要按联机帮助页提供备份扩展名,否则会“存在风险损坏或部分内容”。