
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ランキング
-
偶数ビットだけと奇数ビットだ...
-
excel vba 時間計算と条件分岐...
-
StringBufferクラスについて
-
バイト配列からfloat型の数値を...
-
javaというか文字列について少...
-
URIの記述方法
-
javaのCSVデータ読込についてです
-
ArrayListの要素数の上限
-
DLLで格納された値をVBに渡す方法
-
hiddenの値を消したくない!
-
SQL文がうまく通らないのですが
-
8桁整数を限りなく短い文字列に...
-
PSQLExceptionが発生する
-
文字列で読み込んだ計算式で値...
-
JavaでPOST
-
wsprintf関数の使い方について
-
EL式でのbeansからの値取得につ...
-
コンテンツダウンロード時のプ...
-
JavaでRandom Access Fileから...
-
indexOf("Internet Explorer")!...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
DateTimePickerに値を入れたい...
-
ArrayListの要素数の上限
-
BCD形式で時刻を!
-
wsprintf関数の使い方について
-
excel vba 時間計算と条件分岐...
-
javaのCSVデータ読込についてです
-
PSQLExceptionが発生する
-
JSPでの計算結果表示
-
実行シェルからCOBOLへパラメー...
-
matchesを否定文として使う方法...
-
JSPでHashMap・配列の変数の値...
-
DOSバッチで変数の値を変数名に...
-
VB6,論理演算子Orの使い方がわ...
-
C言語の変数(LSB)の合わせ込...
-
hiddenの値を消したくない!
-
ResultSetの内部構造(Java)
-
Evaluate()に文字列の形式の数...
-
getParameterの値変更
-
Javaの問題なのですが、「3文字...
おすすめ情報