Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中正则表达式的奇怪行为_Java_Regex_String_Replaceall - Fatal编程技术网

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

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-z和a-z)。像这样的事情似乎很简单

问题在于,除非我更改正则表达式,添加另一个字符,例如
-->
[^: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尝试了更多,得出的结论是必须是文本的长度,因为如果我分开它,它工作得很好,但如果我尝试一次完成,它会抛出一个空结果。我尝试了更多,得出的结论是必须是文本的长度,因为如果我分开它,它工作得很完美,但如果我尝试一次性完成,它会抛出一个空结果。