gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:41:44 26 4
gpt4 key购买 nike

我想过滤文本,只留下字母(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]

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

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

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

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 年,其本意是“自由”一词意味着自由分发”

最佳答案

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

我尝试了什么

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

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

关于java - Java 中正则表达式的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45348303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com