【问题标题】:JAVA replacing a String without replacing it many timesJAVA替换一个String而不替换它很多次
【发布时间】:2011-08-07 07:30:32
【问题描述】:
String _p = p;      
for(int i = 0; i <= _p.length()-1; i++)
   _p = _p.replace(lChar[_p.charAt(i)].getText(), tReplace[_p.charAt(i)].getText());
tOut.append(_p);

上面是我用来替换我从 TextArea (tIn -> p) 中读出的字符串的代码,然后有一个标签数组 (lChar) 我存储每个唯一字符(字符值是数组索引) 并且我还有一个 TextField Array (tReplace) 在这里我为 lChar 中的每个 char 编写替换字符串(可以是多个字符)('old' char 中的 char 值是数组索引)。

所以现在我想用 tReplace 中的每个字符替换 lChar 中的每个字符。如果我想用“2”替换“1”,用“1”替换字符串“12”的“2”,我会得到“11”,因为在第一个循环中它将它更改为“22”,在下一个循环中它将其更改为“11”。但我只想改变每个字母一次,就好像我会写一样

String.valueOf(21).replace("2","1").replace("1","2");

任何想法如何做到这一点?

【问题讨论】:

    标签: java arrays string replace char


    【解决方案1】:

    您可以为此任务创建一个自动机:
    使用String.getChars() 将您的字符串转换为char[],然后遍历数组,根据需要替换每个字符。
    注意:如果您需要用长度大于 1 的字符串替换每个 char,您可以使用相同的方法,但使用 char[],使用 StringBuilder,并且对于每个 char:如果需要替换,将替换字符串附加到 StringBuilder,否则:将字符附加到 StringBuilder
    示例代码:

    String original = "1212";
            HashMap<Character, String> map = new HashMap<Character, String>();
            map.put('1', "22");
            map.put('2', "1");
            StringBuilder sb = new StringBuilder();
            for (int i =0;i<original.length();i++) {
                char ch = original.charAt(i);
                if (map.containsKey(ch)) {
                    sb.append(map.get(ch));
                } else {
                    sb.append(ch);
                }
            }
            System.out.println(sb);
    

    将导致:221221

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-05
      • 2014-10-22
      • 2016-09-27
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      相关资源
      最近更新 更多