意図したとおりに動作する vigenere 暗号化/復号化プログラムを作成しましたが、非常に大きなテキスト ファイル (約 500,000 文字) で暗号化/復号化を実行するには 2 ~ 4 分かかります。コードを調べましたが、どの操作がコードを遅くしているのかわかりません。これをスピードアップする方法を知っている人はいますか?
コード:
public static String encrypt(String text, String key)
{
String cipherText = "";
text = text.toLowerCase();
for(int i = 0; i < text.length(); i++)
{
System.out.println("Count: "+ i); //I just put this in to check the
//loop wasn't doing anything unexpected
int keyIndex = key.charAt(i%key.length()) - 'a';
int textIndex = text.charAt(i) - 'a';
if(text.charAt(i) >= 'a' && text.charAt(i) <= 'z') { //check letter is in alphabet
int vigenere = ((textIndex + keyIndex) % 26) + 'a';
cipherText = cipherText + (char)vigenere;
} else
cipherText = cipherText + text.charAt(i);
}
}
return cipherText;
}
暗号化を実行する前に、スキャナーを使用してテキスト ファイルを文字列に読み取るメソッドがあります。この文字列と定義済みのキーを使用して、暗号化されたテキストが作成されます。
ありがとう。
答え
RC のおかげで、文字列の連結に時間がかかっていました。他の誰かが興味を持っている場合、これは私の更新されたコードで、すぐに動作します:
public static String encrypt(String text, String key)
{
StringBuilder cipher = new StringBuilder();
for(int i = 0; i < text.length(); i++)
{
int keyIndex = key.charAt(i%key.length()) - 'a';
int textIndex = text.charAt(i) - 'a';
if(text.charAt(i) >= 'a' && text.charAt(i) <= 'z') {
int vigenere = ((textIndex + keyIndex) % 26) + 'a';
cipher.append((char)vigenere);
} else {
cipher.append(text.charAt(i));
}
}
return cipher.toString();
}