2015-01-06 2 views
1

Я следующий фрагмент кода для игры палач Я развивающихся в Eclipse:Проблема с использованием условного оператора и string.replace

String secret = "apple"; 
String str = "-----"  
for (int i = 0; i < 5; i++) { 
    if (letter == secret.charAt(i)){ 
     str = str.replace(str.charAt(i), letter); 
    } 
} 
System.out.println(str); 

К сожалению, это распечатывания

aaaaa 

вместо

a---- 

Как бы это сделать?

+1

, что это 'письмо' в этом случае? и в любом случае вы не можете использовать '==' для проверки 'String' в java – Setu

+1

Нет, это не компиляция. –

+1

'String # replace (char, char)' заменяет все вхождения первого символа вторым, а не только на указанную (вы не указали, потому что не можете) позицию. –

ответ

5

JavaDoc of String#replace(char, char) утверждает, что он заменит все вхождения не только в первую очередь.

Так как вы хотите, чтобы сделать игру палач, вам нужно только заменить позиции, где letter появляется в secret

Это может быть лучше, чтобы вручную заменить символы в строке с помощью StringBuilder или char[]

char[] secret="apple".toCharArray(); 
char[] str= new char[secret.length]; 
Arrays.fill(str, '-'); 

for (int i = 0; i < secret.length; i++) { 
    if (letter ==secret[i]){ 
     str[i] = letter; 
    } 
} 

System.out.println(new String(str)); 
1

Если вы хотите действительно установить только символ в строку, вы могли бы сделать что-то вроде этого:

StringBuilder sbStr = new StringBuilder(str); 
sbStr.setCharAt(4, 'x'); 

Это ваш код переработан:

String secret = "apple"; 
String str = "-----"  
StringBuilder sbStr = new StringBuilder(str); 
for (int i = 0; i < 5; i++) { 
    if (letter == secret.charAt(i)){ 
     sbStr.setCharAt(i, letter); 
    } 
} 
System.out.println(sbStr.toString()); 
1

str.replace(str.charAt(i), letter); не будет работать, потому что он не заменяет один символ, но все charachters в строке, соответствующей str.charAt(i), что вы могли бы сделать, это использовать StringBuilders изменить символ в данный показатель, как это:

String secret = "apple"; 
StringBuilder str = new StringBuilder("-----"); 
for (int i = 0; i < 5; i++) { 
    if (letter == secret.charAt(i)){ 
     str.setCharAt(i, letter); 
    } 
} 
System.out.println(str.toString()); // Or simply: System.out.println(str); 

Если вы не хотите использовать StringBuilder, что-то вроде этого будет также работать:

String secret = "apple"; 
String str = "-----"; 
for (int i = 0; i < 5; i++) { 
    if (letter == secret.charAt(i)){ 
     str = str.substring(0, i) + secret.charAt(i) + str.substring(i); 
    } 
} 
System.out.println(str); 

Хотя я консультирую StringBuilder в этом случае.

Надеюсь, это поможет.

1

Я предлагаю использовать String, конструктор как для секрет и ул, и отметьте догадку символ в тайне тоже, потому что ваше решение может не выполняется для повторяющихся символов

 char letter = 'a'; 
     StringBuilder secret = new StringBuilder("apple"); 
     StringBuilder str = new StringBuilder("-----"); 


     int index = secret.indexOf(String.valueOf(letter)); 
     if(index != -1) 
     { 
      secret.setCharAt(index, '-'); 
      str.setCharAt(index, letter); 
     } 

     System.out.println(secret); 
     System.out.println(str); 

надеется, что Помогает

Смежные вопросы