2017-09-07 18 views
3

私は、暗号文を平文に変換する暗号プログラムを書いています。手紙の頻度によって、私は手作業ですべての暗号の文字を平文に分解し、パターンがないので、文字列のすべての文字を別の文字に変換するために26回のループを書く必要があります。文字をJavaのループで置き換える方法は?

私の最初の試みは、このabc と私のキーのような文字列は次のようになります例えば、私が入力を質問があるこの

str=str.replaceAll("A","E"); 

のようになりますJavaで置き換える声明、 を使用しています"aをcと置き換え、bをpで置き換え、cをqで置き換える"。 出力はcpqですが、出力はqpqです。 私はそれが1回の変換のようになりたいことを意味します。

だから、私はそれをやっている方法であるかの

を使用して、ループを使用しようとしています:

for (i=1;i<string.length;i++) 
    if (char[i]=="a") 
     char [i] ="b"; 

エラーが、私はcharへの文字列を変換することができないことを私に伝えます。 また、他の25個のif文をこの文の中に入れるのか、それともパラレル化するのか尋ねたいと思いますか?

+8

Javaでは、 'char'リテラルは単一引用符ではなく二重引用符で囲まれています。 –

+2

'char'は予約済みのキーワードです。 – shmosel

答えて

4

:私はあなたのループで25の単一ifステートメントを追加ではなく、あなたの代替品を保管するためにMap<Character, Character>を使用することはありません。

完全なソリューションは、次のようになります。

public static void main(String[] args) { 
    Map<Character, Character> replacements = new HashMap<>(); 
    replacements.put('a', 'c'); 
    replacements.put('b', 'p'); 
    replacements.put('c', 'q'); 

    String input = "abcd"; 
    StringBuilder output = new StringBuilder(); 
    for (Character c : input.toCharArray()) { 
     output.append(replacements.getOrDefault(c, c)); 
    } 
    System.out.println(output.toString()); 
} 

これは、あなたがのために交換していない文字を維持します。出力では、

cpqd 
+0

これは素晴らしい考えです、ありがとう。 –

+0

あなたはoutput.append(replacements.getOrDefault(c、c))について説明してください。 ?私はそれを実行する、それは動作しますが、Cは特別な例です、またはあなたは別の理由でそれをやったのですか? –

+0

'c'は入力文字列' a''、 '' b'''、 '' c''、 '' d''の現在の文字です。'Map#getOrDefault'は、マップ('置換 ')が指定されたキー( 'c')の値を持たないときに第2引数を返すJava 8で導入された新しいメソッドです。この場合、キーは目的のデフォルト値と同じになります。詳細は、https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#getOrDefault-java.lang.Object-V-を参照してください。 – Marvin

2

文字列をcharに変換することはできません。したがって、すべての文字列またはすべての文字を使用する必要があります。

char[i]=='b' 

char[i] = 'b'; 
また

の代わりに、あなたが使用できるいずれかの場合、長い/ else文スイッチを使用:代わりに文字列のための二重引用符を使用してのあなたは、このようなcharの単一引用符を使用することができますまたはマップを作成して使用して、コンバージョンをキーと値のペアに格納することができます。

+0

ありがとう、私は今それを試してみます。 –

2

あなたはこれを解決することができます:あなたの質問の後半部分に答えるために

String str = "abc"; 
    char [] ch = str.toCharArray(); 

    for(int i=0; i<str.length(); i++){ 
     if('a'==str.charAt(i)){ 
      ch[i] = 'c'; 
     } 
     if('b'==str.charAt(i)){ 
      ch[i] = 'p'; 
     } 
     if('c'==str.charAt(i)){ 
      ch[i] = 'q'; 
     } 
    } 
    System.out.println(String.valueOf(ch)); 
+0

ありがとう、非常に有用なコードは、今それを試してみましょう。 –

+0

完璧に動作します、これは私が欲しいものです!ありがとう! –

関連する問題