javaというか文字列について少し質問です><
javaというか文字列について少し質問です><
お願いします。
シーザー暗号で文字列をずらすためのクラスのメソッドをつくったのですが・・・
String decrypt(String str,int key)
{
StringBuffer sb = new StringBuffer(); // もしくはStringBuilder
for(int i=0;i<str.length();i++){
char c=str.charAt(i);
c=(char)((int)c-key);
sb.append( c );
}
こんな感じなのですがアルファベットの小文字26文字のみとしたいので暗号化や復号化の際に越えてしまう場合はアルファベット内でループさせたいのですがいまいちやり方が浮かびません><越えてしまう場合はzからひいたものを表現させれば良いかと思いやってみたのですが全然違う文字が出てきてしまいました。何かいい方法を教えてください。お願いします><
No.1ベストアンサー
- 回答日時:
こう何回も同じ人に答えられると逆にうざったいと思いますが、ちょっと思いついたのでよかったら参考にしてください(笑)
10進数で計算しているのでaが97、zが122で処理をしています。
まず、zよりも大きくなった時は、zとの差を計算し、越えた分だけ96に足すとうまくaからスタートします。(小文字が97から始まるため)
次にaよりもcの値が小さくなってしまった場合ですが、この場合はzから数えるのでしょうか?それともaから数えるのでしょうか?
どっちか分からなかったため、両方考えてみました。
zから数える場合、aよりどれくらい小さいのかを計算し、zから戻っていくので123から弾いていきます。
aから数える場合は96に足していくことでaから数えていくことができます。
ちょっと説明が下手なのでうまく伝わるか分かりませんが、質問主様のお役に立てれば幸いです。
ソースは以下のようになります。
for(int i=0;i<str.length();i++){
char c=str.charAt(i);
c=(char)((int)c-key);
if(c >122) c = (char)((c - 122) + 96);//zを超えていたらzとの差を計算し、最初から数えなおす。
else if(c < 97) c = (char)(123 - (97 - c)); //aよりも小さく、かつzから数える場合
//else if(c < 97) c = (char)((97 - c)+96); //aよりも小さく、かつaから数える場合
sb.append( c );
}
なんどもありがとうございました。
全体的にはすぐできたのにこういう細部で苦戦してしまいました。
ホントにありがとうございました><
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- Java Java 南京錠 2 2023/02/04 11:46
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の変数(LSB)の合わせ込...
-
ダブルクォーテーションを含む...
-
BCD形式で時刻を!
-
web系システムのテストについて
-
VB6,論理演算子Orの使い方がわ...
-
wsprintf関数の使い方について
-
String型の値が大文字か小文字...
-
コマンドプロンプトの日数計算...
-
日付や時刻の"01"を" 1"に変換...
-
javaのCSVデータ読込についてです
-
long型に値を代入したい。
-
Javascriptでマシン固有の情報...
-
checked
-
ArrayListの要素数の上限
-
char型での演算子
-
getParameterの値変更
-
Stringクラスの変数の格納アド...
-
DateTimePickerに値を入れたい...
-
javascriptでビット演算子の「^...
-
JSPでHashMap・配列の変数の値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
wsprintf関数の使い方について
-
ArrayListの要素数の上限
-
BCD形式で時刻を!
-
javaのCSVデータ読込についてです
-
DateTimePickerに値を入れたい...
-
C言語の変数(LSB)の合わせ込...
-
JSPでHashMap・配列の変数の値...
-
matchesを否定文として使う方法...
-
JSPでの計算結果表示
-
hiddenの値を消したくない!
-
結合した文字列をファイル名に...
-
excel vba 時間計算と条件分岐...
-
実行シェルからCOBOLへパラメー...
-
long型に値を代入したい。
-
【Excel VBA】繰り返し処理がで...
-
Stringクラスの変数の格納アド...
-
PSQLExceptionが発生する
-
ResultSetの内部構造(Java)
-
String str = "a\\\\b\\\\c";
おすすめ情報