有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java 7 Unicode正则表达式Tabsonly和Spacesonly

我目前正在尝试为我们的应用程序添加对日语和法语编码的支持。在这样做的过程中,我试图创建两个模式匹配器来检测读取文件中的制表符和空格,而不考虑语言编码

这些将用于确定文件中使用的分隔符,以便相应地进行处理

当我尝试编译一个空间模式时

Pattern.compile(" ", Pattern.UNICODE_CHARACTER_CLASS);

我没有看到它生成一个正则表达式来处理不同的unicode空间值

例如"[\\u00A0\\u2028\\u2029\\u3000\\u00C2\\u009A\\u0041]"

编译似乎可以正常使用“\s”字符集,但其中包括制表符和换行符

我应该如何在Java中实现这一点

更新

所以这不起作用的部分原因是日语网页文本没有空格,尽管看起来有空格。从web imoprt中获取以下行:

実なので説明は不要だろう。その後1987年

这里实际上没有空格う。そ. 只有三个字符

解决这个问题实际上是另一个问题的主题,因此我接受了卡西米尔的回答,因为它很好地处理了法国的案件


共 (2) 个答案

  1. # 1 楼答案

    如果我听你的问题,你可以用这样的东西来表示空间-

    Pattern p = Pattern.compile("^[ ]+$", Pattern.UNICODE_CHARACTER_CLASS);
    String[] inputs = {" ", "  ", " \t", "Hello"};
    for (String input : inputs) {
        Matcher m = p.matcher(input);
        System.out.printf("For input: '%s' = %s%n", input, m.find());
    }
    

    输出为

    For input: ' ' = true
    For input: '  ' = true
    For input: '    ' = false
    For input: 'Hello' = false
    

    和标签

    Pattern p = Pattern.compile("^[\t]+$", Pattern.UNICODE_CHARACTER_CLASS);
    String[] inputs = {"\t", "\t\t", " \t", "Hello"};
    for (String input : inputs) {
        Matcher m = p.matcher(input);
        System.out.printf("For input: '%s' = %s%n", input, m.find());
    }
    

    输出为

    For input: '    ' = true
    For input: '        ' = true
    For input: '    ' = false
    For input: 'Hello' = false
    

    最后,对0个或更多匹配项使用*而不是+。这将使用+,因此需要1个或多个匹配项。以(^)开始,以($)结束

  2. # 2 楼答案

    可以使用否定字符类。例如:

    [^\\S \\t]
    

    这意味着\s没有空格和制表符

    或者可以使用类交叉点:

    [\\s&&[^ \\t]]