【问题标题】:Java Unicode variable namesJava Unicode 变量名
【发布时间】:2010-11-28 04:52:28
【问题描述】:

我在一个讨论变量命名的论坛上进行了一次有趣的讨论。

除了约定之外,我注意到变量具有 Unicode 字符的名称是合法的,例如以下是合法的:

int \u1234;

但是,例如,如果我将其命名为 #,则会产生错误。根据Sun's tutorial,如果“以字母开头、美元符号“$”或下划线字符“_”开头,则有效。”

但 unicode 1234 是一些埃塞俄比亚字符。那么什么是真正的“字母”?

【问题讨论】:

    标签: java variables unicode


    【解决方案1】:

    Unicode 标准定义了什么是字母。

    来自Java Language Specification, section 3.8

    字母和数字可能取自 整个 Unicode 字符集, 它支持大多数编写脚本 在当今世界使用,包括 大集中文、日文和 韩国人。这允许程序员使用 他们的程序中的标识符是 用他们的母语写成。

    一个 “Java 字母”是一个字符 方法 Character.isJavaIdentifierStart(int) 返回真。 “Java 字母或数字” 是该方法所针对的字符 Character.isJavaIdentifierPart(int) 返回真。

    来自CharacterisJavaIdentifierPart 的文档:

    确定字符(Unicode 代码点)是否可以像其他标识符一样是 Java 标识符的一部分 比第一个字符。 如果满足以下任一条件,则字符可能是 Java 标识符的一部分:

    • 这是一封信
    • 它是一个货币符号(例如'$')
    • 是连接标点符号(如'_')
    • 是一个数字
    • 是数字字母(如罗马数字字符)
    • 它是一个组合标记
    • 它是一个非间距标记
    • isIdentifierIgnorable(codePoint) 为字符返回 true

    【讨论】:

      【解决方案2】:

      Unicode 字符属于字符类。有一组 Unicode 字符属于“字母”类。

      Character.isLetter(c) 确定,用于 Java。但对于标识符,Character.isJavaIdentifierStart(c)Character.isJavaIdentifierPart(c) 更相关。

      有关相关的 Unicode 规范,请参阅 this

      【讨论】:

      • 我发现这个答案很简洁,正是我想要的。另一个答案也有我正在寻找的东西,但是里面的东西太多了,我首先注意到了这个答案。
      猜你喜欢
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 2019-04-20
      相关资源
      最近更新 更多