Java 中正则表达式的奇怪行为

Strange behavior with Regex in Java

我想过滤一段文字,只留下字母(a-z 和 A-Z)。这似乎很容易,遵循这样的事情

String cleanedText = text.toString().toLowerCase().replaceAll("[^a-zA-Z]", "");         
System.out.println(cleanedText);

这个输出为空的问题,除非我改变正则表达式,添加另一个字符,例如: --> [^:a-zA-Z]

我已经尝试检查它是否适用于普通正则表达式(不使用 Java 中 String 对象提供的 ReplaceAll 方法),但我遇到了完全相同的问题。

知道这种奇怪行为的根源是什么吗?

我有一个使用 BufferedReader 读取的 txt 文件。我将每一行添加到一个长字符串中,并将我之前发布的代码应用于此。整个代码如下:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.StringBuffer;
import java.util.regex.*;

public class Loader {

    public static void main(String[] args) {

        BufferedReader file = null;
        StringBuffer text = new StringBuffer();
        String str;

        try {
            file = new BufferedReader(new FileReader("text.txt"));
        } catch (FileNotFoundException ex) {
        }
        try

        {
            while ((str = file.readLine()) != null) {
                text.append(str);

            }

            String cleanedText = text.toString().toLowerCase().replaceAll("[^:a-z]", "");       
            System.out.println(cleanedText);
        } catch (IOException ex) {
        }
    }   
}

文本文件是一篇普通文章,我想删除所有不是字母的内容(包括空格)。摘录如下“[16]自由软件基金会 (FSF),成立于 1985 年,旨在 "free" 这个词表示自由分发”

正如我在评论中所写,请更准确地说明问题所在...

我试过的

public class Regexp45348303 {

    public static void main(String[] args) {
        String[] tests = { "abc01", "01DEF34", "abc 01 def.", "a0101\n0202\n0303x" };
        for (String text : tests) {
            String cleanedText = text.toLowerCase().replaceAll("[^a-z]", ""); // A-Z removed too     
            System.out.println(text + " -> " + cleanedText);
        }
    }
}

输出为:

abc01 -> abc
01DEF34 -> def
abc 01 def. -> abcdef
a0101
0202
0303x -> ax

根据我的理解,这是正确的...

最终问题不在于正则表达式,也不在于程序本身。只是如果超过一定长度,eclipse 不会在控制台中显示输出(但您仍然可以处理它)。要解决这个问题,只需在 Window -> Preferences -> Run/Debug -> Console 中检查 fixed width consolehttp://code2care.org/2015/how-to-word-wrap-eclipse-console-logs-width/

中所述

Image of where to check fixed width console checkbox