改变输入中的字符

时间:2013-03-01 02:24:37

标签: java for-loop

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];

但我不确定如何解决它

2 个答案:

答案 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]);