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ランキング
-
WinInet.dllを利用したHttpQuer...
-
バイト配列からfloat型の数値を...
-
JSPでの計算結果表示
-
ダブルクォーテーションを含む...
-
Formの値が変更されたかどうか...
-
wsprintf関数の使い方について
-
初回のスピンボタンの挙動
-
エクセルVBAの初心者です。...
-
変数のビット列
-
StatementクラスのexecuteQuery...
-
次式のような解像度変換のプロ...
-
線形合同法(乗算型)による乱...
-
変数宣言の var は必ずつけるも...
-
文字列から半角スペースと全角...
-
2進数は計算には使えない? 16...
-
文字列で読み込んだ計算式で値...
-
テキストファイルを読み込んで...
-
matchesを否定文として使う方法...
-
偶数ビットだけと奇数ビットだ...
-
Stringクラスの変数の格納アド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
ArrayListの要素数の上限
-
DateTimePickerに値を入れたい...
-
wsprintf関数の使い方について
-
Stringクラスの変数の格納アド...
-
BCD形式で時刻を!
-
javaのCSVデータ読込についてです
-
このプログラミング誰か教えて...
-
Evaluate()に文字列の形式の数...
-
JSPでHashMap・配列の変数の値...
-
このプログラミング誰か教えて...
-
特定の文字列を複数抜き出した...
-
matchesを否定文として使う方法...
-
DOSバッチで変数の値を変数名に...
-
Javaの問題なのですが、「3文字...
-
excel vba 時間計算と条件分岐...
-
実行シェルからCOBOLへパラメー...
-
日付や時刻の"01"を" 1"に変換...
-
VB6,論理演算子Orの使い方がわ...
-
char型での演算子
おすすめ情報