将XSLT函数(字符串到代码点)转换为Java

时间:2014-01-23 10:50:21

标签: java xslt

如何将此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

2 个答案:

答案 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));