如何使用Java中的StringBuilder重写这段代码?

ash*_*lal 3 java string stringbuilder

有一个词,我要用一些特定的字母替换一些特定的字母,例如1代表a,5代表b等等.我正在使用正则表达式.我知道StringBuilder是处理这个问题的最佳方法,因为我正在进行大量的字符串操作.这是我正在做的事情:

String word = "foobooandfoo";
String converted = "";
converted = word.replaceAll("[ao]", "1");
converted = converted.replaceAll("[df]", "2");
converted = converted.replaceAll("[n]", "3");
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使用StringBuilder重写该程序.我尝试了一切,但我不能成功.或者使用String就可以了吗?

eri*_*son 8

我认为这是一个清晰度和性能愉快地重合的情况.我会使用查找表来进行"翻译".

  public static void translate(StringBuilder str, char[] table)
  {
    for (int idx = 0; idx < str.length(); ++idx) {
      char ch = str.charAt(idx);
      if (ch < table.length) {
        ch = table[ch];
        str.setCharAt(idx, ch);
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

如果您str输入的字母很大,或者您的映射很稀疏,则可以使用实际地图,如下所示:

  public static void translate(StringBuilder str, Map<Character, Character> table)
  {
    for (int idx = 0; idx < str.length(); ++idx) {
      char ch = str.charAt(idx);
      Character conversion = table.get(ch);
      if (conversion != null) 
        str.setCharAt(idx, conversion);
    }
  }
Run Code Online (Sandbox Code Playgroud)

虽然这些实现可以就地工作,但您可以创建一个新StringBuilder实例(或附加到传入的实例).