Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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 - Fatal编程技术网

用于过滤非英语文本的java正则表达式

用于过滤非英语文本的java正则表达式,java,regex,Java,Regex,我发现了一些对regex的引用,这些引用过滤掉了非英语的内容,但其中有一些是用Java编写的,除了它们都指的是一些问题,而不是我试图解决的问题: 替换所有非英语字符 有一个空格 创建一个返回true 如果字符串包含任何非英语 性格 我所说的“英文文本”不仅指实际的字母和数字,还指标点符号 到目前为止,我对目标1的理解非常简单: String.replaceAll("\\W", " ") 事实上,这么简单,我怀疑我错过了什么。。。你发现上面有什么警告吗 至于目标2,我可以简单地trim()上面r

我发现了一些对regex的引用,这些引用过滤掉了非英语的内容,但其中有一些是用Java编写的,除了它们都指的是一些问题,而不是我试图解决的问题:

  • 替换所有非英语字符 有一个空格
  • 创建一个返回
    true
    如果字符串包含任何非英语 性格
  • 我所说的“英文文本”不仅指实际的字母和数字,还指标点符号

    到目前为止,我对目标1的理解非常简单:

    String.replaceAll("\\W", " ")
    
    事实上,这么简单,我怀疑我错过了什么。。。你发现上面有什么警告吗

    至于目标2,我可以简单地
    trim()
    上面
    replaceAll()
    后面的字符串,然后检查它是否为空。但是有没有更有效的方法

    事实上,这么简单,我怀疑我错过了什么。。。你发现上面有什么警告吗

    \W
    相当于
    [^\W]
    \W
    相当于
    [a-zA-Z_0-9]
    。使用
    \W
    将替换不是字母、数字或类似下划线的制表符和换行符的所有内容。这是否是个问题真的取决于你

    我所说的“英文文本”不仅指实际的字母和数字,还指标点符号

    在这种情况下,您可能希望使用省略标点符号的字符类;差不多

    [^\w.,;:'"]
    
    创建一个方法,该方法在字符串包含任何非英语字符时返回true

    使用和

    事实上,这么简单,我怀疑我错过了什么。。。你发现上面有什么警告吗

    \W
    相当于
    [^\W]
    \W
    相当于
    [a-zA-Z_0-9]
    。使用
    \W
    将替换不是字母、数字或类似下划线的制表符和换行符的所有内容。这是否是个问题真的取决于你

    我所说的“英文文本”不仅指实际的字母和数字,还指标点符号

    在这种情况下,您可能希望使用省略标点符号的字符类;差不多

    [^\w.,;:'"]
    
    创建一个方法,该方法在字符串包含任何非英语字符时返回true

    使用和


    假设一个英语单词由以下字符组成:[a-zA-Z_0-9]

    如果字符串包含任何非英语字符,则要返回true,请使用:


    假设一个英语单词由以下字符组成:[a-zA-Z_0-9]

    如果字符串包含任何非英语字符,则要返回true,请使用:


    这是我的解决办法。我假设文本可能包含英语单词、标点符号和标准ascii符号,如#、%、@等

    private static final String是\u ENGLISH\u REGEX=“^[\\w\\d\\s\\.\&\\+\-\\,\\!\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
    专用静态布尔值isEnglish(字符串文本){
    if(text==null){
    返回false;
    }
    返回text.matches(是英语正则表达式);
    
    }
    这是我的解决方案。我假设文本可能包含英文单词、标点符号和标准ascii符号,如#、%、@等

    private static final String是\u ENGLISH\u REGEX=“^[\\w\\d\\s\\.\&\\+\-\\,\\!\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
    专用静态布尔值isEnglish(字符串文本){
    if(text==null){
    返回false;
    }
    返回text.matches(是英语正则表达式);
    }
    这对我很有用

      private static boolean isEnglish(String text) {
            CharsetEncoder asciiEncoder = Charset.forName("US-ASCII").newEncoder();
            CharsetEncoder isoEncoder = Charset.forName("ISO-8859-1").newEncoder();
            return  asciiEncoder.canEncode(text) || isoEncoder.canEncode(text);
        }
    
    这对我有用

      private static boolean isEnglish(String text) {
            CharsetEncoder asciiEncoder = Charset.forName("US-ASCII").newEncoder();
            CharsetEncoder isoEncoder = Charset.forName("ISO-8859-1").newEncoder();
            return  asciiEncoder.canEncode(text) || isoEncoder.canEncode(text);
        }
    


    有一小部分合法的英语单词包含重音符号-例如“naïve”。我认为你需要定义你所说的“英语文本”是什么意思。。。i、 e.以下句子是否被视为“英语文本”?“她的未婚夫的名字叫何塞·勃朗特。”@Spudley@Nate你们当然都对。就我的特殊情况而言,“她的未婚夫的名字是JoséBrontë。”并不被认为是全英语的,因此该方法应该返回
    true
    。有少数合法的英语单词包含重音字符,例如“naïve”。我想你需要定义“英语文本”的含义。。。i、 e.以下句子是否被视为“英语文本”?“她的未婚夫的名字叫何塞·勃朗特。”@Spudley@Nate你们当然都对。在我的特殊情况下,“她的未婚夫的名字是JoséBrontë。”并不被认为是全英语的,因此该方法应该返回
    true
    @dogbane为什么
    ^
    $
    ?@regex新手它没有必要,但我要说的很清楚,我是在从头到尾匹配整个字符串。@dogbane您的正则表达式似乎不适用于以非英语字符开头(或结尾)的字符串。你能证实吗?@regex-rookie是的。我的语句按要求返回true。@dogbane您的正则表达式仍然不起作用。试着把一个只有一个非英语字符的全英文文本放在上面,看看我的意思。@dogbane为什么
    ^
    $
    ?@regex新手这不是必需的,但我要说的是,我在从头到尾匹配整个字符串。@dogbane你的正则表达式似乎不适用于开始(或结束)的字符串使用非英语字符。你能证实吗?@regex-rookie是的。我的语句按要求返回true。@dogbane您的正则表达式仍然不起作用。试着把一个只有一个非英语字符的全英语文本放在屏幕上,看看我的意思。-1这行不通。您需要使用
    matcher.find()
    或更改正则表达式以匹配整个字符串。-1这不起作用。您需要使用
    matcher.find()
    或更改正则表达式以匹配整个字符串。