2013-03-01 6 views
0
for (int i= 0; i<inputAxiom.length(); i++) 
{ 
    char c=inputAxiom.charAt(i); 

    if (c == 'f' || c == 'h' || c == 'g') 
    { 
    if (rules[0].equals("f") || rules[0].equals("h")); 
    { 
     inputAxiom = rules[1]; 
    } 

Здравствуйте, что я пытаюсь сделать, это получить пользовательский ввод от inputAxiom и для любых е или ч я хочу, чтобы часть ввода для измененияизменения символов в входе

, например: если inputAxiom = fff, а правила f = fh (который ставит f в правила [0] и fh в правилах [1])

затем он изменится на f-hf-hf-h (изменится каждый f на fh)

В настоящее время, как только он находит f, только изменения всей вещи к fh вместо fh для каждого f

Я думаю, что он должен делать с

inputAxiom = rules[1]; 

, но им не уверен, как это исправить

+0

Строки неизменяемы. Вероятно, вы захотите изменить строку на массив символов с помощью char [] charArray = str.toCharArray(); - тогда сделайте все, что вам нужно. Если вы предвидите, что подставляете один символ ввода более чем одним символом замены, вы должны, вероятно, преобразовать этот символ [] в коллекцию, такую ​​как Список. –

+1

Не могли бы вы разместить минимальный компилируемый пример? То есть, минимальный код для демонстрации проблемы, но мы можем скопировать в наш редактор, скомпилировать и запустить? – apnorton

+0

Вы назначаете ссылку inputAxiom на строку, содержащую @ rules [1] .... – user1428716

ответ

1

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

Например, чтобы заменить все f с f-h, вы могли бы сделать:

outputAxiom = inputAxiom.replaceAll("f", "h-f"); 

Другой возможностью манипулирования строк является StringBuilder API (не путать ее StringBuffer, что это не рекомендуется больше).

0

Вы сейчас изменяете всю строку:

inputAxiom = rules[1]; 

Для того, чтобы изменить определенные символы, цикл через массив как это:

var chars = inputAxiom.toCharArray(); 
for (int i= 0; i<inputAxiom.length(); i++) 
{ 
    char c=inputAxiom.charAt(i); 

    if (c == 'f' || c == 'h' || c == 'g') 
    { 
    if (rules[0].equals("f") || rules[0].equals("h")); 
    { 
     chars[i] = rules[1]; 
    } 
    } 
} 

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

inputAxiom = inputAxiom.replaceAll(rules[0], rules[2]).replaceAll(rules[1], rules[2]); 
Смежные вопросы