一千萬個為什麽

搜索

替換Java 6中的Normalizer.getClass(c)方法

Normalizer類中的 getClass(char c)方法似乎從Java 6開始就缺少。

這種方法存在於我們的遺留代碼中,正在使用,如下所示。我們需要將它遷移到Java 6.關於如何替換它的任何建議?

import sun.text.Normalizer;

 /**
 * Returns an array of strings that have all the possible
 * permutations of the characters in the input string.
 * This is used to get a list of all possible orderings
 * of a set of combining marks. Note that some of the permutations
 * are invalid because of combining class collisions, and these
 * possibilities must be removed because they are not canonically
 * equivalent.
 */
private String[] producePermutations(String input) {
    if (input.length() == 1)
        return new String[] {input};

    if (input.length() == 2) {
        if (getClass(input.charAt(1)) ==
            getClass(input.charAt(0))) {
            return new String[] {input};
        }
        String[] result = new String[2];
        result[0] = input;
        StringBuffer sb = new StringBuffer(2);
        sb.append(input.charAt(1));
        sb.append(input.charAt(0));
        result[1] = sb.toString();
        return result;
    }

    int length = 1;
    for(int x=1; x<input.length(); x++)
        length = length * (x+1);

    String[] temp = new String[length];

    int combClass[] = new int[input.length()];
    for(int x=0; x<input.length(); x++)
        combClass[x] = getClass(input.charAt(x));

   //For each char, take it out and add the permutations
   //of the remaining chars
    int index = 0;
loop:   for(int x=0; x<input.length(); x++) {
        boolean skip = false;
        for(int y=x-1; y>=0; y--) {
            if (combClass[y] == combClass[x]) {
                continue loop;
            }
        }
        StringBuffer sb = new StringBuffer(input);
        String otherChars = sb.delete(x, x+1).toString();
        String[] subResult = producePermutations(otherChars);

        String prefix = input.substring(x, x+1);
        for(int y=0; y

最佳答案

在Java 6中,該方法被重命名為 getCharacterClass ,並且參數從 char 更改為 int ,因為那種替換是無處不在,以適應值大於65,535的Unicode字符。

從開始使用 sun 的包中的方法不應該首先被使用。這可能是為什麽這個調用是在一個單獨的方法中,以防萬一在方法被刪除的時候需要重寫。不幸的是,我無法在公共Java API中找到相應的替代品,因此替代品必須從頭開始編寫或無證。

轉載註明原文: 替換Java 6中的Normalizer.getClass(c)方法