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

标签 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 ) 中给出的示例:

字符串到代码点('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/

相关文章:

xml - xsl 模板匹配 xpath 中的 OR 条件不起作用

Java - 从 Array[] 中删除一组元素的最有效方法是什么

java - 使用 PMD 和 XPath 禁止所有 java.sql 包

xml - xsl :for-each loop, 使用 xsl:if 基于索引

xslt - XSLT XPath正确的语法,用于将元素添加到先前的同级

xml - XSL 如何在不使用属性的情况下根据值计算节点数?

java - 使用 Joda 有效获取时间单位

Java - 从套接字读取?

java - 如何在参数内部调用构造函数的构造函数?

xml - 创建 XSL 样式表来管理 FileMaker Pro XML 输出