Замена всех символов в строке разными символами - PullRequest
1 голос
/ 18 февраля 2012

Здравствуйте, у меня есть этот код, над которым я работаю, и в основном это будет игра, вам нужно взломать код в форме предложения.

То, с чем у меня возникают проблемы, это заменасимволы в предложении с символами из кода.

Примером кода, которым вы заменяете символы, является это ключевое слово Tiger TIGERABCDFHJKLMNOPQSUVWXYZ

в основном, алфавит становится ключевым словом, а остальная частьнеиспользуемые буквы Я пытаюсь изменить символы в предложении на закодированные буквы, если это имеет какой-то смысл.

Однако, когда я пытаюсь заменить символы несколько раз, это неправильно меняет буквы.1010 * Мне нужна помощь с этой частью, прежде чем я смогу продолжить игру.

import javax.swing.JOptionPane;

public class CodeCrackerGame
/*********************************************************
* Code Cracker Game
*********************************************************/
{
  public static void main(String[] args)
  {

    /********************************************
     * 1st Player's SENTENCE
     *******************************************/
    String sentence = JOptionPane.showInputDialog("Enter sentence to be"
        + "encrypted." + "\nThis sentence can be up to 100 characters,"
        + "\nand has a minimum of 7 words.");

    /*Check if hit cancel or x button*/
    if(sentence == null)
    {
      JOptionPane.showMessageDialog(null, "No input", "ERROR", 
          JOptionPane.ERROR_MESSAGE);
      System.exit(0);
    }
    /*Checks if just hit OK*/
    else if(sentence.equals(""))
    {
      JOptionPane.showMessageDialog(null, "No Input", "ERROR", 
          JOptionPane.ERROR_MESSAGE); 
      System.exit(0);
    }

    /*Check if over 100 characters*/
    if(sentence.length() > 100)
    {
      JOptionPane.showMessageDialog(null, "Input has too many characters", 
          "ERROR", JOptionPane.ERROR_MESSAGE);
      System.exit(0);
    }

    int words = 1;
    int i;
    /*Counts spaces to find amount of words*/
    for (i= 0; i< sentence.length(); i++)
     {
      if(sentence.charAt(i)== ' ') 
       {
        words += 1;
       }
     }
    /*Checks if there are less than 7 words*/
    if(words < 7)
    {
      JOptionPane.showMessageDialog(null, "Not enough words", 
          "ERROR", JOptionPane.ERROR_MESSAGE);
      System.exit(0);
    }

    sentence = sentence.toUpperCase();
    /*Check if not alphabetic and if contains illegal punctuation*/
    for (i= 0; i< sentence.length(); i++)
     {
      if(Character.isLetter(sentence.charAt(i)) == false &&
      sentence.charAt(i)!= '!' && sentence.charAt(i)!= ' ' && 
      sentence.charAt(i)!= ',' && sentence.charAt(i)!= '.' &&
      sentence.charAt(i)!= '?' && sentence.charAt(i)!= '-' &&
      sentence.charAt(i)!= ':' && sentence.charAt(i)!= ';' &&
      sentence.charAt(i)!= '(' && sentence.charAt(i)!= ')' &&
      sentence.charAt(i)!= '[' && sentence.charAt(i)!= ']' &&
      sentence.charAt(i)!= '/' && sentence.charAt(i)!= '\'' &&
      sentence.charAt(i)!= '"') 
       {
          JOptionPane.showMessageDialog(null, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
              + "! , . ? - : ; ( ) [ ] / ' \" are allowed", 
              "ERROR", JOptionPane.ERROR_MESSAGE);
          System.exit(0);
       }
     }

    /*Checks if string ends with . ! ?*/
    char c = sentence.charAt(sentence.length()-1);
    if(c != '.' && c != '!' && c != '?')
    {
      JOptionPane.showMessageDialog(null, "Must end with '.' '!' '?'", 
          "ERROR", JOptionPane.ERROR_MESSAGE);
      System.exit(0);
    }
    /*prints out the sentence*/
    JOptionPane.showMessageDialog(null, sentence, 
        "Your message in all CAPS", JOptionPane.INFORMATION_MESSAGE);

    /**************************************************
     * 1st Player's Keyword
     **************************************************/

    String keyword = JOptionPane.showInputDialog("Enter a keyword"
        + "\nwith up to 10 characters");
    /*Check if hit cancel or x button*/
    if(keyword == null)
    {
      JOptionPane.showMessageDialog(null, "No input", "ERROR", 
              JOptionPane.ERROR_MESSAGE);
      System.exit(0);
    }
    /*Checks if just hit OK*/
    else if(keyword.equals(""))
    {
      JOptionPane.showMessageDialog(null, "No Input", "ERROR", 
          JOptionPane.ERROR_MESSAGE); 
      System.exit(0);
    }

    /*Check if keyword is greater than 10 characters*/
    if(keyword.length() > 10)
    {
      JOptionPane.showMessageDialog(null, "Keyword has too many characters", 
          "ERROR", JOptionPane.ERROR_MESSAGE);
      System.exit(0);
    }
    /*Check if keyword is less than 3 characters*/
    if(keyword.length() < 3)
    {
      JOptionPane.showMessageDialog(null, "Keyword has too little characters", 
          "ERROR", JOptionPane.ERROR_MESSAGE);
      System.exit(0);
    }

    keyword = keyword.toUpperCase();
    /*Check if not alphabetic*/
    for (i= 0; i< keyword.length(); i++)
     {
      if(Character.isLetter(keyword.charAt(i)) == false) 
       {
          JOptionPane.showMessageDialog(null, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
              +" are allowed", 
              "ERROR", JOptionPane.ERROR_MESSAGE);
          System.exit(0);
       }
     }
    /*Removes all duplicate letters from the keyword*/
    String temp = "";
    int position = 0;
    while(position < keyword.length())
    {
      temp = keyword.substring(position + 1);
      temp = temp.replaceAll(keyword.charAt(position) + "", "");
      keyword = keyword.substring(0, position + 1) + temp;
      position ++;
   }
    /*Adds the keyword to the alphabet creating a new alphabet*/
    int x=0;
    String output =("");
    String alpha ="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    while(x <alpha.length())
    { 
      if(keyword.indexOf(alpha.charAt(x)) == -1)
      {
      output=output += alpha.charAt(x);
      }
      x++;
    }

    String map = (keyword + output);
    System.out.println(map);

    String newSentence = sentence;
    newSentence = newSentence.replace(alpha.charAt(0), map.charAt(0));
    newSentence = newSentence.replace(alpha.charAt(1), map.charAt(1));
    newSentence = newSentence.replace(alpha.charAt(2), map.charAt(2));
    newSentence = newSentence.replace(alpha.charAt(3), map.charAt(3));
    newSentence = newSentence.replace(alpha.charAt(4), map.charAt(4));
    newSentence = newSentence.replace(alpha.charAt(5), map.charAt(5));
    newSentence = newSentence.replace(alpha.charAt(6), map.charAt(6));
    newSentence = newSentence.replace(alpha.charAt(7), map.charAt(7));
    newSentence = newSentence.replace(alpha.charAt(8), map.charAt(8));
    newSentence = newSentence.replace(alpha.charAt(9), map.charAt(9));
    newSentence = newSentence.replace(alpha.charAt(10), map.charAt(10));
    newSentence = newSentence.replace(alpha.charAt(11), map.charAt(11));
    newSentence = newSentence.replace(alpha.charAt(12), map.charAt(12));
    newSentence = newSentence.replace(alpha.charAt(13), map.charAt(13));
    newSentence = newSentence.replace(alpha.charAt(14), map.charAt(14));
    newSentence = newSentence.replace(alpha.charAt(15), map.charAt(15));
    newSentence = newSentence.replace(alpha.charAt(16), map.charAt(16));
    newSentence = newSentence.replace(alpha.charAt(17), map.charAt(17));
    newSentence = newSentence.replace(alpha.charAt(18), map.charAt(18));
    newSentence = newSentence.replace(alpha.charAt(19), map.charAt(19));
    newSentence = newSentence.replace(alpha.charAt(20), map.charAt(20));
    newSentence = newSentence.replace(alpha.charAt(21), map.charAt(21));
    newSentence = newSentence.replace(alpha.charAt(22), map.charAt(22));
    newSentence = newSentence.replace(alpha.charAt(23), map.charAt(23));
    newSentence = newSentence.replace(alpha.charAt(24), map.charAt(24));
    newSentence = newSentence.replace(alpha.charAt(25), map.charAt(25));

    System.out.println(newSentence);


    /******************************************
     * 2nd players Guess
     * ****************************************/

    String guess = JOptionPane.showInputDialog(null,sentence + "\n" +
        "Player 2 Enter a guess"
        + "\form example a=b");

}

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

Библиотека apache commons lang имеет служебный метод replaceChars(), который «кодирует» строку - это как раз то, что вам нужно.

Вот пример того, как вы будете его использовать:

 String output = StringUtils.replaceChars(input, 
     "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "TIGERABCDFHJKLMNOPQSUVWXYZ");
1 голос
/ 18 февраля 2012

Посмотрите на строку, замените все на регулярное выражение. У вас слишком много повторений в домашней работе. Оптимизировать это.

...