如何在java中使用正则表达式删除某些字符

如何在java中使用正则表达式删除某些字符,java,regex,string,punctuation,Java,Regex,String,Punctuation,一般的问题是:如何解析字符串,消除标点符号并替换其中的一些 我正在尝试修改一些输入文本。情况是,我有一个普通的文本文件,带有标点符号,我想把它们全部删除。如果符号是。。。我想用“”字符串替换它 我从来没有使用过正则表达式,所以我尝试了字符串比较,但显然它不足以用于所有情况。我有麻烦,如果有两个标点符号;就像在课文“第二天(第四天)”,当我有)。一起 例如,根据给定的输入,我期望以下内容: Input : [...] at it!" This speech caused Excpected ou

一般的问题是:如何解析字符串,消除标点符号并替换其中的一些

我正在尝试修改一些输入文本。情况是,我有一个普通的文本文件,带有标点符号,我想把它们全部删除。如果符号是。。。我想用“”字符串替换它

我从来没有使用过正则表达式,所以我尝试了字符串比较,但显然它不足以用于所有情况。我有麻烦,如果有两个标点符号;就像在课文“第二天(第四天)”,当我有)。一起

例如,根据给定的输入,我期望以下内容:

Input :  [...] at it!" This speech caused
Excpected output : at it <s> this speech caused
Input:[…]点击它!"这一讲话引起了广泛关注
出人意料的输出:这次演讲引起了
我的代码中的每个单词都被添加到ArrayList中,因为我以后需要使用它

非常感谢

FileInputStream fileInputStream = new FileInputStream("TEXT.txt");
InputStreamReader inputStreamReader = new InputStreamReader(
        fileInputStream, "UTF-8");
BufferedReader bf = new BufferedReader(inputStreamReader);

words.add("<s>");
String s;
while ((s = bf.readLine()) != null) {
    String[] var = s.split(" ");

    for (int i = 0; i < var.length; i++) {
        if (var[i].endsWith(",") || var[i].endsWith(")")
                || var[i].endsWith("(") || var[i].endsWith(":") 
                ||  var[i].endsWith(";") ||var[i].endsWith("'")) {
            var[i] = var[i].substring(0, var[i].length() - 1);
            words.add(var[i].toLowerCase());
        } else if ( var[i].startsWith("'")) {
            var[i] = var[i].substring(1, var[i].length() );
            words.add(var[i].toLowerCase());
        } else if (var[i].endsWith(".") || var[i].endsWith("...")
                || var[i].endsWith("!") || var[i].endsWith("?")) {
            var[i] = var[i].substring(0, var[i].length() - 1);
            words.add(var[i].toLowerCase());
            words.add("<s>");
        } else {
            words.add(var[i].toLowerCase()); // 
            // System.out.println("\n neu eingelesenes Wort: " + var[i]);
        }}
}
FileInputStream FileInputStream=newfileinputstream(“TEXT.txt”);
InputStreamReader InputStreamReader=新的InputStreamReader(
fileInputStream,“UTF-8”);
BufferedReader bf=新的BufferedReader(inputStreamReader);
字。加上(“”);
字符串s;
而((s=bf.readLine())!=null){
字符串[]var=s.split(“”);
对于(int i=0;i
您的代码显示了许多条件,但假设您只想替换“.”、“?”或“!”字符的所有实例

定位这些字符的正则表达式是
[.!?]
方括号表示“字符类”,这意味着它匹配方括号内的任何字符,但不是所有字符。这允许我们指定要匹配的多个字符

假设您已将整个文件加载到字符串名“myText”中

就这样!现在如果你有条件,他们只能从某些地方,复杂的事情删除。如果你需要有关条件的信息,请编辑你的文章,包括所有的特殊情况下,这不应该发生


注意:由于您显然没有将整个文件加载到单个字符串中,因此在使用缓冲区时,您可以继续对正在读取的字符串调用此方法。

您的代码显示了许多条件,但是假设您只想替换“.”、“?”或“!”字符的所有实例

定位这些字符的正则表达式是
[.!?]
方括号表示“字符类”,这意味着它匹配方括号内的任何字符,但不是所有字符。这允许我们指定要匹配的多个字符

假设您已将整个文件加载到字符串名“myText”中

就这样!现在如果你有条件,他们只能从某些地方,复杂的事情删除。如果你需要有关条件的信息,请编辑你的文章,包括所有的特殊情况下,这不应该发生


注意:由于您显然没有将整个文件加载到单个字符串中,因此在使用缓冲区时,您可以继续对正在读取的字符串调用此方法。

首先使用正则表达式过滤掉标点符号,然后按空格将其拆分,并将结果添加到列表中:

FileInputStream fileInputStream = new FileInputStream("TEXT.txt");
InputStreamReader inputStreamReader = new InputStreamReader(
        fileInputStream, "UTF-8");
BufferedReader bf = new BufferedReader(inputStreamReader);
words.add("<s>");
String s;
while ((s = bf.readLine()) != null) {
    s = s.replaceAll("[^a-zA-Z ]", ""); // replace all non-word/non-space characters with an empty string
    String[] var = s.split(" ");
    words.addAll(var);
}
FileInputStream FileInputStream=newfileinputstream(“TEXT.txt”);
InputStreamReader InputStreamReader=新的InputStreamReader(
fileInputStream,“UTF-8”);
BufferedReader bf=新的BufferedReader(inputStreamReader);
字。加上(“”);
字符串s;
而((s=bf.readLine())!=null){
s=s.replaceAll(“[^a-zA-Z]”,“”);//用空字符串替换所有非单词/非空格字符
字符串[]var=s.split(“”);
单词。addAll(var);
}

首先使用正则表达式过滤掉标点符号,然后按空格将其拆分,并将结果添加到列表中:

FileInputStream fileInputStream = new FileInputStream("TEXT.txt");
InputStreamReader inputStreamReader = new InputStreamReader(
        fileInputStream, "UTF-8");
BufferedReader bf = new BufferedReader(inputStreamReader);
words.add("<s>");
String s;
while ((s = bf.readLine()) != null) {
    s = s.replaceAll("[^a-zA-Z ]", ""); // replace all non-word/non-space characters with an empty string
    String[] var = s.split(" ");
    words.addAll(var);
}
FileInputStream FileInputStream=newfileinputstream(“TEXT.txt”);
InputStreamReader InputStreamReader=新的InputStreamReader(
fileInputStream,“UTF-8”);
BufferedReader bf=新的BufferedReader(inputStreamReader);
字。加上(“”);
字符串s;
而((s=bf.readLine())!=null){
s=s.replaceAll(“[^a-zA-Z]”,“”);//用空字符串替换所有非单词/非空格字符
字符串[]var=s.split(“”);
单词。addAll(var);
}
您必须使用

String.replaceAll(<your RegEx>, "");
String.replaceAll(,“”);
要构建正则表达式(并了解它们如何工作),您可以使用

注意:您需要将输出中的所有\替换为\\,以符合java的转义规则。

您必须使用

String.replaceAll(<your RegEx>, "");
String.replaceAll(,“”);
要构建正则表达式(并了解它们如何工作),您可以使用


注意:您需要将输出中的所有\替换为\\,以符合java的转义规则。

您真的应该学习如何使用正则表达式。这是一个非常好的教程:。也是一个测试正则表达式的好地方:您真的应该学习如何使用正则表达式。这是一个非常好的教程:。也是一个测试正则表达式的好地方:这样,我每行得到一个唯一的字符串,比如,应用于上面的