Reputation: 11
Hello so i have this code I'm working on and basically it is gonna be a game you have to crack a code in the form of a sentence.
What i'm having trouble with is replacing the characters in the sentence with the characters from the code.
An example of the code you replace the characters with is this Keyword Tiger TIGERABCDFHJKLMNOPQSUVWXYZ
basically the alphabet becomes the keyword then the rest of the unused letters I'm trying to change the characters in a sentence with the coded letters if that makes any sense.
However when i try to replace characters multiple times it does not properly change the letters.
I need help with this part before I can continue with the rest of the game.
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");
}
Upvotes: 1
Views: 1384
Reputation: 425398
The apache commons lang library has the utility method replaceChars()
that "encodes" a String - it's just what you need.
Here's an example of how you would use it:
String output = StringUtils.replaceChars(input,
"ABCDEFGHIJKLMNOPQRSTUVWXYZ", "TIGERABCDFHJKLMNOPQSUVWXYZ");
Upvotes: 2
Reputation: 135
Look at string replace all with regex. You have too much repetition in your homework. Streamline it.
Upvotes: 1