0

我有一个具有某些“令牌”的字符串。
例子:

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

我还有一个字符串列表,例如{"John", "doctor", "Jim","engineer"}

执行以下操作的最佳方法是什么:
我想用列表中的相应元素替换所有字符 #

即我想跳过XJohn替换Jimfrom#engineerfor the other #
我想只是循环,string#toCharArray()但如果有更好的方法来做到这一点,我很感兴趣。

注意:第二个列表中的值与相应的标记匹配。因此,列表中的第一个值即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则从输入数组中读取索引处的值并将其附加到StringBuilder对象中。
    • 附加一个空格。
  • StringBuilder.toString()并修剪以删除尾随空格。
于 2012-11-29T12:57:54.280 回答