I'm supposed to input a string, and replace all and, to, you, and for substrings with &, 2, U, and 4.
When I input the string "and , and,and , to , to,to , you ,you , you, for ,for , for,a , a,e , e,i , i,o , o,u , u", it only outputs and when I print it.
public void simplify()
{
System.out.println("Enter a string to simplify: ");
String rope = in.next();
System.out.println(simplifier(rope));
}
public String simplifier(String rope)
{
rope = rope.replace(" and "," & ");
rope = rope.replace(" and"," &");
rope = rope.replace("and ","& ");
rope = rope.replace(" to "," 2 ");
rope = rope.replace(" to"," 2");
rope = rope.replace("to ","2 ");
rope = rope.replace(" you "," U ");
rope = rope.replace("you ","U ");
rope = rope.replace(" you"," U");
rope = rope.replace(" for "," 4 ");
rope = rope.replace("for ","4 ");
rope = rope.replace(" for"," 4");
rope = rope.replace("a ","");
rope = rope.replace(" a","");
rope = rope.replace("e ","");
rope = rope.replace(" e","");
rope = rope.replace("i ","");
rope = rope.replace(" i","");
rope = rope.replace(" o","");
rope = rope.replace("o ","");
rope = rope.replace("u ","");
rope = rope.replace(" u","");
System.out.print(rope);
return rope;
}
Output:and and
It seems to cut off the returned string after the first space
I have no idea what is going on and why it is not working as it should. What am I doing wrong?
2 Answers 2
Here is how I simplified your code and got the correct result:
String rope = "and , and,and , to , to,to , you ,you , you, for ,for , for,a , a,e , e,i , i,o , o,u , u";
// rope = rope.replaceAll(" ", "");
rope = rope.replaceAll("and", "&");
rope = rope.replaceAll("to", "2");
rope = rope.replaceAll("you", "U");
rope = rope.replaceAll("for", "4");
rope = rope.replaceAll("a", "");
rope = rope.replaceAll("e", "");
rope = rope.replaceAll("i", "");
rope = rope.replaceAll("o", "");
rope = rope.replaceAll("u", "");
System.out.println(rope);
Replace the first rope = rope.replace(" and "," & "); with rope = rope.replace("and "," & ");
Now it should work. The problem was that the first "and" you were trying to replace was and, not and, which is why that was left and did not get replaced.
Also remove the second last line of simplifier, which is System.out.print(rope);. This is duplicate as you are already printing the result in the calling method.
UPDATE: I see what you are trying to do here. Try this:
For each word that you want to replace, replace it only once. So for and, do:
rope.replace("and", "&");
For to, do:
rope.replace("to", "2");
DO NOT add any space between the words, it is not necessary. Doing replace() once will replace ALL occurrences of that word.
2 Comments
and asdfasdf, it still outputted and andand hello, it returned &, and when i inputted ` and hello, and` got returned
replaceAllreplaces all the text from the first parameter with the text from the second parameter. Read docs.oracle.com/javase/7/docs/api/java/lang/String.html for information.& , &,& , 2 , 2,2 , U ,U , U, 4 ,4 , 4,,,,,,,,,,simplifier()returns exactly what you need