Java中正则表达式的奇怪行为
我想过滤文本,只留下字母(a-z和a-z)。这似乎很容易,遵循这样的How to filter a Java String to get only alphabet characters?
String cleanedText = text.toString().toLowerCase().replaceAll("[^a-zA-Z]", "");
System.out.println(cleanedText);
这个函数的输出是空的,除非我更改正则表达式,添加另一个字符,例如:
-->[^:a-zA-Z]
我allready试图检查它是否适用于普通正则表达式(没有使用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开始,意指“免费”一词意指分配“
”的自由度。
# 1 楼答案
最终,问题不在于正则表达式,也不在于程序本身。只是,如果输出超过一定长度,eclipse不会在控制台中显示输出(但您仍然可以处理它)。要解决这个问题,只需检查窗口中的固定宽度控制台;偏好->;运行/调试->;控制台 如http://code2care.org/2015/how-to-word-wrap-eclipse-console-logs-width/所述
Image of where to check fixed width console checkbox
# 2 楼答案
正如我在评论中所写,请更准确地说明问题所在
我试过的
结果是:
根据我的理解这是正确的