代码之家  ›  专栏  ›  技术社区  ›  ʞɔıu

Java正则表达式匹配基本多语言平面外的字符

  •  17
  • ʞɔıu  · 技术社区  · 14 年前

    如何在java中匹配unicode基本多语言平面之外的字符(目的是删除它们)?

    2 回复  |  直到 11 年前
        1
  •  24
  •   James Van Huis    14 年前

    要删除所有非BMP字符,应执行以下操作:

    String sanitizedString = inputString.replaceAll("[^\u0000-\uFFFF]", "");
    
        2
  •  4
  •   Anon    14 年前

    您要查找特定字符还是BMP之外的所有字符?

    StringBuilder 要从较高的平面构造包含代码点的字符串,regex将按预期工作:

      String test = new StringBuilder().append("test").appendCodePoint(0x10300).append("test").toString();
      Pattern regex = Pattern.compile(new StringBuilder().appendCodePoint(0x10300).toString());
    
      Matcher matcher = regex.matcher(test);
      matcher.find();
      System.out.println(matcher.start());
    

    如果你想移除 字符串中的非BMP字符,然后我将使用 字符串拼接

      StringBuilder sb = new StringBuilder(test.length());
      for (int ii = 0 ; ii < test.length() ; )
      {
         int codePoint = test.codePointAt(ii);
         if (codePoint > 0xFFFF)
         {
            ii += Character.charCount(codePoint);
         }
         else
         {
            sb.appendCodePoint(codePoint);
            ii++;
         }
      }
    
    推荐文章