2013-10-18 16 views
2

在此先感謝您的耐心配合。這是我的問題。 我正在用Java編寫一個程序,最適合一組不同的字符。 我必須將所有字符存儲在一個字符串中。我開始使用 私有靜態最終字符串值=「」; 然後我添加了A-Z,a-z和所有常用符號。 但他們仍然太少,所以我認爲可能是Unicode的解決方案。如何使用不同的Unicode字符構建最長的字符串

現在的問題是:什麼是獲得所有可以在Eclipse中顯示的Unicode字符的最佳方式(如果存在無法識別的字符(如小矩形顯示的那樣),我的算法可能會失敗。是否可以創建一個字符串(或一些字符串),並且所有字符(en.wikipedia.org/wiki/List_of_Unicode_characters)正確顯示?

我可以從http://www.terena.org/activities/multiling/euroml/tests/test-ucspages1ucs.htmlhttp://zenoplex.jp/tools/unicoderange_generator.html做一個粗略的複製粘貼,但我會感謝一些更乾淨的解決方案。 我不知道是否有方法從字體中提取字符(Unifont一個)。或者,也許我應該解析這個(www。utf8-chartable.de/unicode-utf8-table.pl)網頁。

此外,通過將所有字符添加到字符串中,我可能會得到錯誤: 「該類型生成的字符串需要超過65535字節才能在常量池中以Utf8格式進行編碼」(在此問題中進行了討論SO:/ questions/10798769/how-to-process-a-string-with-823237-characters)。

混合解決方案可以接受。我可以在SO問題/ 4989091/java中的刪除重複項中刪除重複項)

最後:接受每個解決方案以獲得最長唯一不同字符字符串。 謝謝!

+1

「那些顯示爲像小矩形」 - 這是依賴於字體或文件格式。某些符號需要某些字體,而其他符號需要文件格式。 – Obicere

+1

請問**爲什麼**? –

+0

我正在嘗試一個大的基地轉換。 –

回答

3

你混合了一些東西。在Eclipse中能否顯示角色的問題取決於您選擇的字體;以及源文件是否可以正確處理取決於您爲源文件設置了哪種字符編碼。當選擇UTF-8和一個好的Unicode字體時,您可以使用並顯示幾乎任何字符,至少比單個字符的字符更適合。

但是真的需要在Eclipse中顯示角色嗎?您可以使用unicode轉義符,例如\u20ac指向字符,而不管它們是否可以顯示或文件編碼是否可以處理它們。

而且如果不是炸掉你的源代碼的要求,可以很容易地創建一個String包含所有現有的字符:

// all chars (i.e. UTF-16 values) 
StringBuilder sb=new StringBuilder(Character.MAX_VALUE); 
for(char c=0; c<Character.MAX_VALUE; c++) sb.append(c); 
String s=sb.toString(); 
// if it should behave like a compile-time constant: 
s=s.intern(); 

// all unicode characters (aka code points) 
StringBuilder sb=new StringBuilder(2162686); 
for(int c=0; c<Character.MAX_CODE_POINT; c++) sb.appendCodePoint(c); 
String s=sb.toString(); 
// if it should behave like a compile-time constant: 
s=s.intern(); 

如果您wan't的String只包含有效的Unicode字符,您可以在循環內使用if(Character.isDefined(c)) …。但是這是一個移動的目標 - 新的JRE很可能會知道更多定義的字符。

+0

謝謝。所有的角色都生成了! –

0

嚴重使用Apache類,org.apache.commons.lang.RandomStringUtils(commons-lang)可以解決你的目的。

http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/RandomStringUtils.html

也請參閱下面的代碼API的使用,

import org.apache.commons.lang3.RandomStringUtils; 

public class RandomString { 

    public static void main(String[] args) { 


     // Random string only with numbers 

    String string = RandomStringUtils.random(64, false, true); 

    System.out.println("Random 0 = " + string); 


    // Random alphabetic string 

    string = RandomStringUtils.randomAlphabetic(64); 

    System.out.println("Random 1 = " + string); 


    // Random ASCII string 

    string = RandomStringUtils.randomAscii(32); 

    System.out.println("Random 2 = " + string); 


    // Create a random string with indexes from the given array of chars 

    string = RandomStringUtils.random(32, 0, 20, true, true, "bj81G5RDED3DC6142kasok".toCharArray()); 

    System.out.println("Random 3 = " + string); 
    } 
} 
+0

好的,但是因爲我需要它們,爲什麼要使用隨機技術?感謝分享! –

+0

隨機字符串的操作。 當前私有高代理字符被忽略。這些都是屬於值56192(db80)和56319(dbff)之間的unicode字符,因爲我們不知道如何處理它們。正確地處理高和低代理人 - 即如果隨機選擇一個高代理人,55296(d800)至56191(db7f),那麼它隨後是低代理人。如果選擇一個低代理,56320(dc00)至57343(dfff),則將其放置在隨機選擇的高代理之後。 –

+0

有關更多詳細信息,請參閱api文檔,http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/RandomStringUtils.html –

相關問題