【问题标题】:How to check whether a Java String contains GSM Extended Characters (non Unicode)如何检查 Java 字符串是否包含 GSM 扩展字符(非 Unicode)
【发布时间】:2013-06-05 12:54:52
【问题描述】:

我的目标:我想检查一个 Java 字符串是否包含来自 GSM Extended 的字符。现有代码成功检查了 GSM 字符,但我很难掌握如何检查 GSM 扩展字符,例如“[”和“]”。

我的代码:

private static final String GSM_EXTENDED = "\u000c^{}\\[~]|\u20ac";
public static boolean isUnicode(String input) {        
    return !((input.matches('[' + GSM + "]*")) || (input.matches('[' + GSM_EXTENDED + "]*")));
}

结果:我的单元测试无法将 ']' 识别为 GSM Extended,此外,当从 GUI 输入任何 GSM Extended 字符时,它们不会被识别为 GSM。 p>

【问题讨论】:

  • 你不能像其他人一样使用 unicode id 吗? \u005B 和 \u005D
  • 你好 Djon。如果我尝试将 GSM_EXTENDED 字符串设置为“\u005B\u005D”,那么当我的 isUnicode() 方法运行时,我得到......目标 VM 中发生异常:索引 4 [[]]*附近的未关闭字符类*
  • 啊!也许 input.matches() 的 String 参数需要 \ 字符来转义括号字符?
  • \\\u005B\\\u005D 可用于此方法。

标签: java string unicode gsm


【解决方案1】:

在正则表达式的方括号内,连字符是一个特殊字符,因此您需要在 GSM 字符串中将其转义为 "\\-"

GSM_EXTENDED 字符串中的右括号 ("]") 终止了括号中的字符类,因此您需要将其转义为 "\\]"

【讨论】:

  • 嗨 VGR。啊,是的,我认为这就是为什么在我的单元测试中没有识别出 ']' 的原因。但是,在我的 GUI 中输入时仍然没有检测到 GSM_EXTENDED 字符。
  • 啊,这是您的答案的组合,而且我的 isUnicode() 方法的逻辑错误。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 2010-11-14
  • 1970-01-01
  • 2017-09-23
  • 2021-06-12
  • 2012-08-15
  • 2014-12-27
相关资源
最近更新 更多