2016-01-14 80 views
1

如何生成随机字母表,以便用户输入的字符串中的每个字符都被随机字符替换。一旦选择了一个随机字母,它就会从随机化的可能性中移除。以下是我迄今为止:随机字母字符替换

import java.util.ArrayList; 
import java.util.Random; 
import java.util.Scanner; 

/** 
* 
* @author Dan 
*/ 
public class k { 
    public static void main(String args[]) { 

     Scanner in = new Scanner(System.in); 
     System.out.println("Enter a sentence: "); 
     String msg = in.nextLine(); 

     ArrayList<Character> al = new ArrayList<Character>(); 
     Random gen = new Random(); 
     int num1, num2, num3, num4, num5,num6,num7,num8,num9,num10,num11,num12,num13,num14,num15,num16,num17,num18,num19,num20,num21,num22,num23,num24, num25, num26; 
     int digit1, digit2; 
     int length; 


     for (int i = 65; i <=90; i++){ 
      al.add((char)i); 
     } 


      num1 = gen.nextInt(al.size()); 
      length = String.valueOf(num1).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num1 = Integer.valueOf(result); 
      } 
      al.remove(num1); 

      num2 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num2 = Integer.valueOf(result); 
      } 
      al.remove(num2); 

      num3 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num3 = Integer.valueOf(result); 
      } 
      al.remove(num3); 

      num4 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num4 = Integer.valueOf(result); 
      } 
      al.remove(num4); 

      num5 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num5 = Integer.valueOf(result); 
      } 
      al.remove(num5); 

      num6 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num6 = Integer.valueOf(result); 
      } 
      al.remove(num6); 

      num7 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num7 = Integer.valueOf(result); 
      } 
      al.remove(num7); 

      num8 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num8 = Integer.valueOf(result); 
      } 
      al.remove(num8); 

      num9 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num9 = Integer.valueOf(result); 
      } 
      al.remove(num9); 

      num10 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num10 = Integer.valueOf(result); 
      } 
      al.remove(num10); 

      num11 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num11 = Integer.valueOf(result); 
      } 
      al.remove(num11); 

      num12 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num12 = Integer.valueOf(result); 
      } 
      al.remove(num12); 

      num13 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num13 = Integer.valueOf(result); 
      } 
      al.remove(num13); 

      num14 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num14 = Integer.valueOf(result); 
      } 
      al.remove(num14); 

      num15 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num15 = Integer.valueOf(result); 
      } 
      al.remove(num15); 

      num16 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num16 = Integer.valueOf(result); 
      } 
      al.remove(num16); 

      num17 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num17 = Integer.valueOf(result); 
      } 
      al.remove(num17); 

      num18 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num18 = Integer.valueOf(result); 
      } 
      al.remove(num18); 

      num19 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num19 = Integer.valueOf(result); 
      } 
      al.remove(num19); 

      num20 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num20 = Integer.valueOf(result); 
      } 
      al.remove(num20); 

      num21 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num21 = Integer.valueOf(result); 
      } 
      al.remove(num21); 

      num22 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num22 = Integer.valueOf(result); 
      } 
      al.remove(num22); 

      num23 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num23 = Integer.valueOf(result); 
      } 
      al.remove(num23); 

      num24 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num24 = Integer.valueOf(result); 
      } 
      al.remove(num24); 

      num25 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num25 = Integer.valueOf(result); 
      } 
      al.remove(num25); 

      num26 = gen.nextInt(al.size()); 
      length = String.valueOf(num2).length(); 
      if (length == 1){ 
       System.out.print(al.get(num1)); 
      } 
      else if (length == 2){ 
       digit1 = (num1 % 10); 
       digit2 = num1/10; 
       String result = "" + digit1 + digit2; 
       num26 = Integer.valueOf(result); 
      } 
      al.remove(num26); 

      msg = msg.toLowerCase(); 




      ArrayList<Character> bl = new ArrayList<Character>(); 
      for (int i = 0; i <=26; i++){ 
      bl.add((char)i); 
      } 

      String newmsg = msg.replaceAll("a", String.valueOf((int) num1)); 
      bl.remove(num1); 
      newmsg = newmsg.replaceAll("b", String.valueOf((int) num2)); 
      bl.remove(num2); 
      newmsg = newmsg.replaceAll("c", String.valueOf((int) num3)); 
      bl.remove(num3); 
      newmsg = newmsg.replaceAll("d", String.valueOf((int) num4)); 
      bl.remove(num4); 
      newmsg = newmsg.replaceAll("e", String.valueOf((int) num5)); 
      bl.remove(num5); 
      newmsg = newmsg.replaceAll("f", String.valueOf((int) num6)); 
      bl.remove(num6); 
      newmsg = newmsg.replaceAll("g", String.valueOf((int) num7)); 
      bl.remove(num7); 
      newmsg = newmsg.replaceAll("h", String.valueOf((int) num8)); 
      bl.remove(num8); 
      newmsg = newmsg.replaceAll("i", String.valueOf((int) num9)); 
      bl.remove(num9); 
      newmsg = newmsg.replaceAll("j", String.valueOf((int) num10)); 
      bl.remove(num10); 
      newmsg = newmsg.replaceAll("k", String.valueOf((int) num11)); 
      bl.remove(num11); 
      newmsg = newmsg.replaceAll("l", String.valueOf((int) num12)); 
      bl.remove(num12); 
      newmsg = newmsg.replaceAll("m", String.valueOf((int) num13)); 
      bl.remove(num13); 
      newmsg = newmsg.replaceAll("n", String.valueOf((int) num14)); 
      bl.remove(num14); 
      newmsg = newmsg.replaceAll("o", String.valueOf((int) num15)); 
      bl.remove(num15); 
      newmsg = newmsg.replaceAll("p", String.valueOf((int) num16)); 
      bl.remove(num16); 
      newmsg = newmsg.replaceAll("q", String.valueOf((int) num17)); 
      bl.remove(num17); 
      newmsg = newmsg.replaceAll("r", String.valueOf((int) num18)); 
      bl.remove(num18); 
      newmsg = newmsg.replaceAll("s", String.valueOf((int) num19)); 
      bl.remove(num19); 
      newmsg = newmsg.replaceAll("t", String.valueOf((int) num20)); 
      bl.remove(num20); 
      newmsg = newmsg.replaceAll("u", String.valueOf((int) num21)); 
      bl.remove(num21); 
      newmsg = newmsg.replaceAll("v", String.valueOf((int) num22)); 
      bl.remove(num22); 
      newmsg = newmsg.replaceAll("w", String.valueOf((int) num23)); 
      bl.remove(num23); 
      newmsg = newmsg.replaceAll("x", String.valueOf((int) num24)); 
      bl.remove(num24); 
      newmsg = newmsg.replaceAll("y", String.valueOf((int) num25)); 
      bl.remove(num25); 
      newmsg = newmsg.replaceAll("z", String.valueOf((int) num26)); 
      bl.remove(num26); 


      System.out.println(); 
      System.out.println(); 
      System.out.println(); 
      System.out.println(); 



      System.out.println(newmsg); 

      System.out.println(); 
      System.out.println(); 
      System.out.println(); 
      System.out.println(); 

      String newmsg1 = newmsg.replaceAll(String.valueOf((int) num1),"a"); 
      newmsg1= newmsg1.replaceAll(String.valueOf((int) num2),"b"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num3),"c"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num4),"d"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num5),"e"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num6),"f"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num7),"g"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num8),"h"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num9),"i"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num10),"j"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num11),"k"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num12),"l"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num13),"m"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num14),"n"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num15),"o"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num16),"p"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num17),"q"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num18),"r"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num19),"s"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num20),"t"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num21),"u"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num22),"v"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num23),"w"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num24),"x"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num25),"y"); 
      newmsg1 = newmsg1.replaceAll(String.valueOf((int) num26),"z"); 












      System.out.println(newmsg1); 


    } 
} 









How would I now go about changing replacing the string characters with those `from the` randomly generated alphabet. 


import java.util.*; 


class alphaRandom { 


    public static void main(String[] args) { 


    ArrayList<Character> al = new ArrayList<Character>(); 

    Random gen = new Random(); 

    int num; 


    for(int i = 65; i <= 90; i++) { 

     al.add((char)i); 

    } 


    while(al.size() > 0) { 

     num = gen.nextInt(al.size()); 

     System.out.print(al.get(num)); 

     al.remove(num); 

    } 

} 

} 
+0

你应该开始包装你在方法中重用的代码。 'int num1,num2,num3,num4,num5,num6,num7,...'并开始使用数组(这将允许您将一些重复的代码放入循环中) – Pshemo

回答

0

一种方式可能是

  • 所有AZ字符创建集合(列表)
  • 洗牌这个列表(创建类似ck, ...,n) - Collection.shuffle可能对您有用。
  • 创建原始字母和洗牌的人物,如a->cb->k之间的映射...... z->n

然后

  • 创建空char[]阵列相同长度的字符串要编码
  • 迭代在每个原始字符串中的字符
  • 使用先前创建的映射并将新的(空)数组替换为当前c haracter
  • 之后,您可以打印新的字符数组的内容,或基于它创建新的字符串。

你似乎已经达到什么样的是在第一个两分以

ArrayList<Character> al = new ArrayList<Character>(); 
//... 
for (int i = 65; i <=90; i++){ 
    al.add((char)i); 
} 

描述BTW,你可以重写你的循环是在象更可读的方式:

for (char ch = 'a'; ch<='z'; ch++){ 
    al.add(ch); 
} 

记住要避免魔术数字(更多信息:What is a magic number, and why is it bad?

+0

作为一个在Java方面相对缺乏经验的人,试图在我的程序中实现上面的代码已经没什么灾难性的了。对不起,如果这看起来要求很高,但你会介意写出一些主要方面吗? –

+0

恐怕我无法帮助你,因为我们大多数人都从我们犯的错误中学到了最好的东西。因此,如果您首先尝试对每个步骤进行编码,那么对您更好。如果您对这些步骤中的某个步骤有任何疑问,并会显示您的尝试。我会尽力帮你一点。 – Pshemo