有 Java 编程相关的问题?

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

c语言中的java代码点等价物#

我用JAVA编写了这段代码,效果很好

    String a = "ABC";
    System.out.println(a.length());
    for (int n = 0; n < a.length(); n++)
        System.out.println(a.codePointAt(n));

输出与预期一致 3. 65 66 67 我对d.length()有点困惑,因为它可以以字符形式返回长度,但字符串必须存储每个<;16位256字符或unicode字符所需的任何字符

但问题是我怎样才能做同样的事情?。 我需要扫描字符串并根据找到的一些unicode字符进行操作

我需要翻译的真正代码是

    String str = this.getString();
    int cp;
    boolean escaping = false;
    for (int n = 0; n < len; n++)
    {
        //===================================================
        cp = str.codePointAt(n); //LOOKING FOR SOME EQUIVALENT IN C#
        //===================================================
        if (!escaping)
        {
          ....

       //Closing all braces below.

提前谢谢

我有多爱JAVA:)。只需要交付一个Win应用程序,它是Java/Linux应用程序服务器的客户端


共 (2) 个答案

  1. # 1 楼答案

    确切的翻译是:

    string a = "ABC⤶"; //Let's throw in a rare unicode char
    Console.WriteLine(a.Length);
    for (int n = 0; n < a.Length; n++)
        Console.WriteLine((int)a[n]); //a[n] returns a char, which we can cast in an integer
    //final result : 4 65 66 68 10550
    

    在C#中,您根本不需要codePointAt,您可以通过将字符转换为int直接获得unicode数字(或者对于赋值,它是隐式转换的)。所以你可以通过简单的

    cp = (int)str[n];
    

    我有多爱C:)

    但是,这仅适用于较低的Unicode值。分解字符串时,代理项对被处理为两个不同的字符,因此它们不会作为一个值打印。如果你真的需要处理UTF32,你可以参考this answer,它基本上使用

    int cp = Char.ConvertToUtf32(a, n);
    

    使用^{}条件将循环增加2(因为它是在两个字符上编码的)

    你的翻译就会变成

    string a = "ABC\U0001F01C";
    Console.WriteLine(s.Count(x => !char.IsHighSurrogate(x)));
    for (var i = 0; i < a.Length; i += char.IsSurrogatePair(a, i) ? 2 : 1)
        Console.WriteLine(char.ConvertToUtf32(a, i));
    

    请注意计数从s.Length()到一点点LINQ的变化,因为代理项被计为两个字符。我们只是简单地计算有多少个字符不是更高的代理,以获得实际字符的清晰计数

  2. # 2 楼答案

    下面的代码获取字符串一部分的codpoint

    var s = "\uD834\uDD61";
    for (var i = 0; i < s.Length; i += char.IsSurrogatePair(s, i) ? 2 : 1)
    {
        var codepoint = char.ConvertToUtf32(s, i);
        Console.WriteLine("U+{0:X4}", codepoint);
    }