如何将此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)中给出的示例:
string-to-codepoints('a')= 97
我发现了这个:
char ch = 'a';
System.out.println(String.format("\\u%04x", (int) ch));
但我明白了: \ u0061
答案 0 :(得分:2)
对于单个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中的整数类型,您可以像任何其他数字一样添加或减去char值。
但是,当初始ch
是ASCII字母时,这可能只会给你一个明智的答案。
答案 1 :(得分:1)
将值打印为unicode转义序列; XSLT打印一个十进制值。
这应该效果更好:
System.out.println("a".codePointAt(0));