0

スキャナとファイル リーダーを使用してファイルから読み取ろうとしていますが、コードが文字を HashBiMap に入れていない理由がわかりません。

public class MappedCharCoder implements CharCoder {

private HashBiMap<Character, Character> codeKey = HashBiMap.create(26);

/**
 * The constructor takes a FQFN and reads from the file placing the contents
 * into a HashBiMap for the purpose of encryption and decryption.
 * 
 * @param map
 *            The variable map is the file name
 * @throws FileNotFoundException
 *             If the file does not exist an exception will be thrown
 */
public MappedCharCoder(String map) throws FileNotFoundException {

    HashBiMap<Character, Character> code = this.codeKey;
    FileReader reader = new FileReader(map);
    Scanner scanner = new Scanner(reader);

    while (scanner.hasNextLine()) {
                    int x = 0;
                    int y = 1;
        String cmd = scanner.next();
        cmd.split(",");
        char[] charArray = cmd.toCharArray();

        char key = charArray[x];
        if (code.containsKey(key)) {
            throw new IllegalArgumentException(
                    "There are duplicate keys in the map.");
        }
        char value = charArray[y];
        if (code.containsValue(value)) {
            throw new IllegalArgumentException(
                    "There are duplicate values in the map.");
        }
        code.forcePut(key, value);
                    x+=2;
                    y+=2;
    }

    scanner.close();

    if (code.size() > 26) {
        throw new IllegalStateException(
                "The hashBiMap has more than 26 elements.");
    }

}

@Override
public char encode(char charToEncode) {
    char encodedChar = ' ';
    if (this.codeKey.containsKey(charToEncode)) {

        encodedChar = this.codeKey.get(charToEncode);
        return encodedChar;
    } else {
        return charToEncode;
    }

}

@Override
public char decode(char charToDecode) {

    char decodedChar = ' ';
    if (this.codeKey.containsValue(charToDecode)) {
        this.codeKey.inverse();
        decodedChar = this.codeKey.get(charToDecode);
        return decodedChar;
    } else {
        return charToDecode;
    }
}

}

コードからわかるように、置換暗号を作成しようとしています。このクラスを機能させるのを手伝ってくれれば、他のクラスを機能させることができると思います。本当にありがとう。

4

1 に答える 1

0

cmd.split(",")を返しますがString[]、その結果をすぐに破棄しています。

おそらくあなたが望むのは、より近いものです

String[] chars = cmd.split(",");
char key = chars[0].charAt(0);
char value = chars[1].charAt(0);
// all the other checking you do

また、値がすでにマップにある場合、FWIWHashBiMapはすでに をスローします。IllegalArgumentException(ただし、キー用ではありません。)

于 2013-10-08T19:49:15.007 に答える