0

特定の「トークン」を持つ文字列があります。
例:

"Someone e.g. X here is a # and the other i.e. X is not but over is something else like #"  

String のリストもあります。{"John", "doctor", "Jim","engineer"}

次のことを行う最善の方法は何ですか:すべての文字をリスト内の対応する要素に
置き換えたいです。#

つまり、スキップXして andJohnを置き換えたいJimfrom #and engineerfor the other #
をループするだけだと思っていましたstring#toCharArray()が、これを行うためのより良い方法があるかどうかに興味がありました。

注: 2 番目のリストの値は、対応するトークンと一致します。つまり、リストの最初の値は、またはJohnの最初の出現にマップされます。 X#

例:

入力: "Someone e.g. X here is a # and the other i.e. X is not but the other is something else like # but X is at least X but not #"
{"John", "doctor", "Jim","John", "engineer", "doctor"}
出力:
"Someone e.g. X here is a doctor and the other i.e. X is not but the other is something else like Jim but X is at least X but not doctor"

4

1 に答える 1

2

この種の置換に似たものを可能にするMessageFormatを見ることに興味があるかもしれません。

例えば

MessageFormat.format(""
    + "Someone e.g. {0} here is a {1} and the other i.e. {2} " 
    + "is not but over is something else like {3}", 
    new String [] {"John", "doctor", "Jim","engineer"});

編集

入力文字列を変更してプレースホルダーを含めることができず、更新で述べたようにプレースホルダーに特別な意味がある場合 (つまり、X を無視し、# を置き換える必要があります)、次のようにする必要があります。

  • カウンターを 0 に初期化します。
  • のオブジェクトを作成しますStringBuilder
  • スペースで入力文字列をトークン化する
  • 各トークンを反復処理する
    • X の場合、カウンターをインクリメントし、トークンをそのままStringBuilderオブジェクトに追加します。
    • # の場合はcounter、入力配列から index の値を読み取り、それをStringBuilderオブジェクトに追加します。
    • スペースを追加します。
  • StringBuilder.toString()そしてトリムして末尾のスペースを削除します。
于 2012-11-29T12:57:54.280 に答える