You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Java中Character.charCount的C#等效方法及对应实现代码

嘿,我来帮你搞定C#里对应Java的这个功能!

在Java里你可能用Character.charCount(int codePoint)来判断一个代码点需要多少个UTF-16字符表示,在C#里我们可以实现一个逻辑完全等效的方法——核心是遵循UTF-16的编码规则:基本多语言平面(U+0000到U+FFFF)的字符用1个char表示,补充平面(U+10000到U+10FFFF)的字符需要2个char(一对代理字符)。

实现代码

下面是完整的方法,包含代码点有效性检查,和Java的charCount行为完全对齐:

public static int GetCharCountForCodePoint(int codePoint)
{
    // 先验证输入的代码点是否为合法Unicode代码点
    if (!char.IsValidCodePoint(codePoint))
    {
        throw new ArgumentOutOfRangeException(
            nameof(codePoint), 
            "The provided code point is not a valid Unicode code point."
        );
    }

    // 补充平面的代码点需要2个UTF-16字符,其余仅需1个
    return codePoint > 0xFFFF ? 2 : 1;
}

调用示例

给你几个实际使用的例子,方便快速理解:

// 普通ASCII字符'A',代码点0x41,返回1
Console.WriteLine(GetCharCountForCodePoint('A')); 

// 中文汉字'中',代码点0x4E2D,属于基本平面,返回1
Console.WriteLine(GetCharCountForCodePoint('中')); 

// 表情符号😀,代码点0x1F600,属于补充平面,返回2
Console.WriteLine(GetCharCountForCodePoint(0x1F600)); 

关键细节说明

  • char.IsValidCodePoint(codePoint):C#内置方法,用来过滤无效的代码点(比如代理区0xD800-0xDFFF的数值、超出U+0000-U+10FFFF范围的数值),和JavacharCount对无效输入的处理逻辑一致(都会抛出异常)。
  • 补充平面判断:直接通过codePoint > 0xFFFF区分,因为补充平面的最小代码点就是U+10000(即0x10000),大于0xFFFF。

内容的提问来源于stack exchange,提问作者user2696668

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:09:01