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 が見つかるとすぐに、 f ごとに fh ではなく fh にすべて変更されます

関係していると思います

inputAxiom = rules[1];

しかし、それを修正する方法がわかりません

4

2 に答える 2

1

文字列は不変です。既存の String インスタンスの一部を変更することはできません。できることは、元の文字列の変更されたコピーに置き換えることです。

たとえば、 allfをに置き換えるにはf-h、次のようにします。

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

文字列を操作するもう 1 つの可能性は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 に答える