如何将此 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
最佳答案
对于单个 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 字母时,这可能只会给您一个合理的答案。
关于java - 将 XSLT 函数(字符串到代码点)转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21305971/