2011-10-09 42 views
3

在Java中,我創建一個使用unicode和overline的字符串,因爲我試圖顯示數字的平方根。我需要知道一些格式問題的字符串長度。在unicode中使用組合字符時,查找字符串長度的常用方法似乎失敗,如以下示例所示。任何人都可以幫助我找到隨機數在平方根時第二個字符串的長度,或者提示如何更好地進行平方根顯示?Java:使用unicode overline顯示平方根時的字符串長度?

String s = "\u221A"+"12"; 
    String t = "\u221A"+"1"+"\u0305"+"2"+"\u0305"; 
    System.out.println(s); 
    System.out.println(t); 
    System.out.println(s.length()); 
    System.out.println(t.length()); 

感謝您的幫助,我無法找到這個使用谷歌任何東西。

+0

您的輸出將顯示在哪裏?在通過Swing的GUI上?在通過System.out.println的終端上?別處? – ninjalj

+0

這將在使用Swing的面板中顯示。面板大小將根據字符串的長度而變化。 – cafman

+0

Swing應該有一些機制來獲取要呈現的字符串的預測大小。 – ninjalj

回答

7

查找字符串的長度通常的方法似乎忽視

他們沒有失敗,報告中的字符串lenght Unicode字符數[*]。如果你需要另一種行爲,你需要明確地定義「字符串長度」是什麼意思。

如果您對顯示字符串長度感興趣,那麼通常您會對像素(或某些其他邏輯/物理單位)的計數感興趣,並且這是顯示層的響應能力(首先,您可能有不同的寬度對於不同的字符,如果字體不是等寬的)。

但是,如果你在計數graphemes「在一個特定的書寫系統的情況下寫的最小單位鮮明」)的數量,here的一個很好的引導與代碼和例子只是感興趣。複製修整,從粘貼有相關的代碼,我們希望有這樣的事情:

public static int getGraphemeCount(String text) { 
     int graphemeCount = 0; 
     BreakIterator graphemeCounter = BreakIterator.getCharacterInstance(); 
     graphemeCounter.setText(text); 
     while (graphemeCounter.next() != BreakIterator.DONE) 
      graphemeCount++; 
     return graphemeCount; 
    } 

請記住:上述使用的默認locale。更靈活和強大的方法將,例如,收到一個明確的locale作爲參數,並調用BreakIterator.getCharacterInstance(locale)代替

[*]準確地說,在評論中指出,String.length()計數的Java字符,這是實際上是代碼 - 單位採用UTF-16編碼。這相當於只在我們位於BMP內時才統計Unicode字符。

+0

由於他使用Swing,他可能需要像素。 – ninjalj

+0

此外,'String.length()'返回代碼單元的數量,而不是Unicode字符,它應該等於代碼點,保存爲Unicode非字符。 – ninjalj

+0

我一直在網上閱讀,看起來像你指出我在正確的方向。字素似乎是我想要的。鏈接幫助。謝謝。 – cafman