JAVA заменяет строку без многократной замены - PullRequest
0 голосов
/ 17 апреля 2011
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), где я храню каждый уникальный символ (значение char равноиндекс Array) и у меня также есть массив TextField (tReplace), здесь я записываю строку замены (которая может быть несколькими символами) для каждого символа в lChar (значение char из «старого» символа - это индекс массива).

Итак, теперь я хочу заменить каждый символ в lChar на каждый символ в tReplace.Если я хочу заменить «1» на «2» и «2» на «1» для строки «12», я получаю «11», потому что в первом цикле он заменяет его на «22», а в следующем циклеизменяет его на «11».НО я хочу изменить каждую букву только один раз, как если бы я написал

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

Есть идеи, как это сделать?

1 Ответ

1 голос
/ 17 апреля 2011

вы можете создать автомат для этой задачи:
приведите вашу String к char [], используя String.getChars(), а затем выполните итерацию по массиву, заменив каждый символ по желанию.
примечание: если вам нужно заменить каждый символ строкой, длина которой> 1, вы можете использовать тот же подход, но вместо этого использовать char [], использовать StringBuilder и для каждого символа: если его необходимо заменить, добавьте замещающую строку в 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

...