スキャナとファイル リーダーを使用してファイルから読み取ろうとしていますが、コードが文字を 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;
}
}
}
コードからわかるように、置換暗号を作成しようとしています。このクラスを機能させるのを手伝ってくれれば、他のクラスを機能させることができると思います。本当にありがとう。