簡體   English   中英

在Java中將Unicode值轉換為字符串

[英]Convert unicode value to string in java

我正在嘗試提取文本中的貨幣,並且從包含特殊貨幣符號的db中獲取貨幣。 例如,對於磅,我在數據庫中具有磅“ \\ u00A3”的unicode以及其他標識符,例如“ gbp”。

我試圖從unicode中獲取相應的符號,並按照此處的建議在循環中與我的文本進行比較。

但是,當我評估我的代碼時,結果如下面的圖片所示: 結果

private Optional<Currency> extractTokenWise(Iterable<String> tokens){
    try {
        for (String aToken : tokens) {
            for (String currency : currencies.keySet()) {
                for (String arep : currencies.get(currency)) {
                    if(arep.startsWith("\\")){ //special character for currency written in unicode representation                  
                        byte[] charset = arep.getBytes("UTF-8");
                        arep = new String(charset, "UTF-8");
                    }
                    if (aToken.equals(arep)) {
                        return Optional.of(Currency.findProperEnum(currency));
                    }
                }
            }
        }
    }catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return Optional.empty();
}

有趣的是,當arep等於"\£" ,它不起作用,但是當我專門給出String"\£" ,它將產生我想要的結果。 我在這里想念什么?

如評論中所述,這樣的方法應該起作用:

if (arep.startsWith("\\u")) {
        arep = Character.toString((char) Integer.parseInt(arep.substring(2), 16));
}

我認為您將Java代碼中的unicode 轉義序列包含此類轉義序列的字符串混合在一起。

String poundSign = "\£"; poundSign分配一個包含單個字符£的字符串。 該字符串的長度為1個字符。 在內存和類文件中,它將占用2個字節。

它看起來像arep包含字符串通過指定String unicodeEscapeForPoundSign = "\\\£"; -這就是您的第一個if語句要測試的內容。 它包含Java代碼中使用的unicode轉義序列 ,但不包含此轉義序列表示的字符。 它包含6個字符“ \\”,“ u”,“ 0”,“ 0”,“ A”和“ 3”(如您的IDE所示)。 arep.getBytes("UTF-8"); 返回僅包含這些字符和new String(charset, "UTF-8");的數組new String(charset, "UTF-8"); 將數組轉換回字符串不是字符串£

解決方案取決於您從數據庫中獲得什么 假設您具有從db-value到Currency對象或ISO貨幣代碼的映射,則不需要第一個if語句,只需確保arep包含正確的字符串即可:

  • String arep = "\£" (單英鎊字符)
  • String arep = "\\\£" (磅字符java unicode轉義字符串)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM