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 获取用户输入,并且对于每个 f 或 h 我希望输入的那部分改变

例如:如果 inputAxiom = fff 且规则为 f=fh(将 f 置于 rules[0] 并将 fh 置于 rules[1])

然后它将更改为 f-hf-hf-h(将每个 f 更改为 fh)

目前,一旦它发现 f 只是将整个事物更改为 fh 而不是每个 f 的 fh

我认为这与

inputAxiom = rules[1];

但我不知道如何解决它

4

2 回答 2

1

字符串是不可变的。您不能更改现有 String 实例的一部分。您可以做的是用原始字符串的修改副本替换它。

例如,要将 all 替换ff-h,您可以:

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

操作字符串的另一种可能性是StringBuilderAPI(不要将其误认为StringBuffer,不再推荐)。

于 2013-03-01T02:28:48.727 回答
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]);
于 2013-03-01T02:29:24.450 回答