有 Java 编程相关的问题?

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

将XSLT函数(stringtocodepoints)转换为Java

如何将此XSLT代码“翻译”为Java

<xsl:value-of select="number(string-to-codepoints(upper-case($char)) - string-to-codepoints('A'))+10"/>

我只知道:“fn:string to codepoints函数返回表示Unicode代码点的xs:integer值序列。”

根据(http://www.xsltfunctions.com/xsl/fn_string-to-codepoints.html中给出的示例:

字符串到代码点('a')=97

我发现:

char ch = 'a';
System.out.println(String.format("\\u%04x", (int) ch));

但是我得到:\u0061


共 (2) 个答案

  1. # 1 楼答案

    对于单个char,您可以将其强制转换为int以获得十进制值:

    System.out.println((int)ch);
    

    对于String来说,有.toCharArray()将其转换为char[],但如果字符串涉及BMP之外的Unicode字符(即U+FFFF之上),则这与“代码点序列”并不完全相同,后者在Java中表示为两个char值的代理对。要正确处理代理,您需要使用类似the one described in this answer的技术

    要回答你提出的具体问题,你可以

    number(string-to-codepoints(upper-case($char)) - string-to-codepoints('A'))+10
    

    在Java中作为

    char ch = // wherever you get $char from
    int num = Character.toUpperCase(ch) - 'A' + 10;
    

    因为char在Java中是一个整数类型,您可以像任何其他数字一样添加或减去字符值

    但是,只有当ch的首字母是ASCII字母时,这才可能给你一个合理的答案

  2. # 2 楼答案

    将值打印为unicode转义序列;XSLT打印一个十进制值

    这应该会更好:

    System.out.println("a".codePointAt(0));