[英]Convert XSLT function (string-to-codepoints) to 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
對於單個char
您可以將其轉換為int
以獲取十進制值:
System.out.println((int)ch);
對於String
有一個.toCharArray()
可以將其轉換為char[]
但是如果該字符串涉及BMP之外的Unicode字符(即U + FFFF以上),則該字符串與“代碼點序列”並不完全相同。在Java中表示為兩個char
值的代理對。 為了正確處理代理人,您將需要使用此答案中描述的技術。
要回答您提出的特定問題,您可以
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字母時,這才可能給您一個明智的答案。
將值打印為Unicode轉義序列; XSLT打印十進制值。
這應該工作得更好:
System.out.println("a".codePointAt(0));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.