Java中正则表达式的奇怪行为
我想过滤文本,只留下字母(a-z和a-z)。像这样的事情似乎很简单 问题在于,除非我更改正则表达式,添加另一个字符,例如Java中正则表达式的奇怪行为,java,regex,string,replaceall,Java,Regex,String,Replaceall,我想过滤文本,只留下字母(a-z和a-z)。像这样的事情似乎很简单 问题在于,除非我更改正则表达式,添加另一个字符,例如:-->[^:a-zA-Z] 我allready试图检查它是否适用于普通正则表达式(没有使用Java中String对象提供的方法ReplaceAll),但我遇到了完全相同的问题 你知道这种奇怪行为的根源是什么吗 我用BufferedReader读取了一个txt文件。我将每一行添加到一个长字符串中,并将之前发布的代码应用于此。整个代码如下: import java.io.Buff
:
-->[^: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开始,意指“自由”一词意指自由分发“< P>”,正如我在评论中所写的,更详细地说明了什么是错……/P> 我试过的
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
根据我的理解,这是正确的…正如我在评论中所写,请更准确地说明问题所在 我试过的
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不会在控制台中显示输出(但您仍然可以处理它)。要解决这个问题,只需检查窗口->首选项->运行/调试->控制台中的固定宽度控制台 如中所述
最后,问题不在于正则表达式,也不在于程序本身。只是,如果输出超过某个长度,eclipse不会在控制台中显示输出(但您仍然可以处理它)。要解决这个问题,只需检查窗口->首选项->运行/调试->控制台中的固定宽度控制台 如中所述
您可能需要
[^A-Za-z]
(带空格)请添加一些示例,顺便说一句:您以前调用toLowerCase时不需要A-z;-)适合我,我想是输入有问题。请描述一个真实的问题。text
包含什么内容?它适合我。程序:类RegexSample{public static void main(String args[]){String text=“fdsfsdfsd fg 3443”#$@fvc3G###DVD”String cleanedText=text.toString().toLowerCase().replaceAll(“[^a-zA-Z]”),System.out.println(cleanedText)}输出:fdsfsdfsdfgfvcgdvd您可能需要^a-zA-Z]
(带空格)请添加一些示例,顺便说一句:您以前调用toLowerCase时不需要A-Z;-)适合我,我想是输入有问题。请描述一个真实的问题。text
包含什么内容?它适合我。程序:类RegexSample{public static void main(String args[]){String text=“fdsfsdfsd fg 3443#$@fvc3G###DVD”String cleanedText=text.toString().toLowerCase().replaceAll(“[^a-zA-Z]”),System.out.println(cleanedText)}输出:fdsfsdfsdfgfvcgdvdI尝试了更多,得出的结论是必须是文本的长度,因为如果我分开它,它工作得很好,但如果我尝试一次完成,它会抛出一个空结果。我尝试了更多,得出的结论是必须是文本的长度,因为如果我分开它,它工作得很完美,但如果我尝试一次性完成,它会抛出一个空结果。