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获取用户输入,并且对于每个f或h,我希望输入的那部分改变
例如:如果inputAxiom = fff并且规则是f = f-h(将f放在规则[0]而f-h放在规则[1]中)
然后它将变为f-hf-hf-h(将每个f改为f-h)
目前,只要它发现f只是将整个事物的变化改为f-h而不是每f的f-h
我认为这与
有关inputAxiom = rules[1];
但我不确定如何解决它
答案 0 :(得分:1)
字符串是不可变的。您无法更改现有String实例的一部分。你可以做的是用原始字符串的修改副本替换它。
例如,要将所有f
替换为f-h
,您可以执行以下操作:
outputAxiom = inputAxiom.replaceAll("f", "h-f");
操纵字符串的另一种可能性是StringBuilder
API(不要将其误认为是StringBuffer
,不再推荐它。)
答案 1 :(得分: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]);