Java 用空格替换所有字母和等号

Java 用空格替换所有字母和等号,java,text,writer,Java,Text,Writer,我正在尝试使用此代码从包含随机数字和字母的文本文件中删除所有字母 package textEdit; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class RemoveLetters { public static voi

我正在尝试使用此代码从包含随机数字和字母的文本文件中删除所有字母

package textEdit;

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

public class RemoveLetters {



    public static void readFile(String file) {
        try {
            FileReader fis = new FileReader(file);
            BufferedReader reader = new BufferedReader(fis);
            FileWriter writer = new FileWriter(file);
            BufferedWriter bwriter = new BufferedWriter(writer);
            String line = null;

            while ((line = reader.readLine()) != null) {
                for (int i = 0; i < symbolsAndLetters.length; i++) {
                    String str = symbolsAndLetters[i];
                    str = str.replace(str, ""); 
                }
            }
            reader.close();
            bwriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }   

    public static String[] symbolsAndLetters = {"A", "B", "C",
        "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", 
        "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y",
        "Z", "=","a", "b", "c", "d", "e", "f", "g", "h", "i", 
        "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
        "u", "v", "w", "x", "y", "z",};

    /**
     * @param args
     */

    public static void main(String[] args) {
        readFile("c:/users/Kyle/workspace/Learn more java/src/music.txt");
    }

}
包文本编辑;
导入java.io.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.FileReader;
导入java.io.FileWriter;
导入java.io.IOException;
公共类移除器{
公共静态void readFile(字符串文件){
试一试{
FileReader fis=新的FileReader(文件);
BufferedReader读取器=新的BufferedReader(fis);
FileWriter writer=新的FileWriter(文件);
BufferedWriter bwriter=新的BufferedWriter(writer);
字符串行=null;
而((line=reader.readLine())!=null){
for(int i=0;i

问题是,它删除了文件中的所有内容,我对Java的读写非常陌生,所以有人能帮我找出我做错了什么吗?

循环中,在
for
循环之后,应该将行写回文件

当循环转到下一行时,它会松开
str
中的所有内容


您已经打开了文件输出流,但从未写入任何内容。它不会覆盖所有内容,也不会写入任何内容。

以下是您在
循环中实际执行的操作(请阅读注释):


我将创建一个新文件,将输出写入其中。这里我只是在它后面加上“新”一词。
--FileWriter writer=新的FileWriter(文件+“新”)

然后使用正则表达式替换所需的字符
--line=line.replaceAll(“[a-zA-Z]”,“”)

然后将其附加到新文件:

--bwriter.append(第+行“\n”)

你认为这行是什么-
str=str.replace(str,”)是吗?您没有替换行,也没有将更改写入文件。请记住(但您可以始终在内存中加载,然后像这样替换)它实际上覆盖了所有内容,基本上创建了一个新的空文件。我没有测试它,但您能同时写回正在读取的文件吗?也许我是老派,但我会写入临时文件,一旦完成,关闭两个文件,删除原始文件并将临时文件重命名回原来的位置。如果您阅读OP上评论中的链接,您将看到应该做的是写入临时文件,并在完成后移动。
// iterating over the items of your own static array (without fast enumeration)
for (int i = 0; i < symbolsAndLetters.length; i++) {
    // initializing a new String and assigning it the value of your array
    // that is currently indexed in your for-loop
    String str = symbolsAndLetters[i];
    // replacing the String's content by replacing its value 
    // (1st parameter, the "str" value itself)
    // with an empty String
    str = str.replace(str, ""); 
}
// your outer loop iterating over each line of your input file

while ((line = reader.readLine()) != null) {

    // writing a new String representing the line read from the
    // original,
    // but replacing each of its alphabetic characters (through regex)
    // with an empty String
    writer.write(line.replaceAll("\\p{Alpha}", ""));
}