Замена текста в Java

352
23 декабря 2016, 13:29

Изучаю Java не так давно, и хочу создать простенькую библиотеку замены. И не могу точно понять какой метод использовать при этом. Мне нужно что бы цифры, заменяло на текст, при работе цикла . А колличество значений определялось длинной массива, или то что заменяло бы его. Прилагаю код, код не обрабатывает замену просто выводит цифры.

   int i1=0;
  String [] numbers = new String[3];
    numbers[0]="1";
    numbers[1]="2";
    numbers[2]="3";
  String[] symbols = new String[3];
   symbols[0]="одИн";
   symbols[1]="двА";
   symbols[2]="Тры";
   int LengthArray = numbers.length;
  do
   {
    i1=i1+1;   // i1++
     //System.out.println(i1);
     String i01 = Integer.toString(i1);
     System.out.println(i01.replaceAll(numbers[i1],symbols[i1]));   
    }        
    while(i1<=LengthArray - 1);
Answer 1

Не совсем понял, что именно Вы хотите сделать, но если правильно уловил мысль, то вам лучше использовать ассоциативный контейнер map.

Map<Character, String> replaces = new HashMap<>();
replaces.put('1', "один");
replaces.put('2', "два");
/* ... */
for (Character c : input)
    System.out.println(replaces.get(c));
Answer 2

В целом, ответ от @saltukkos полностью удовлетворяет Вашему условию. В качестве входных данных приходит Map, где явно обозначается соответствие цифры символу:

//Мапа для замены значений
    Map<String, String> replaces = new HashMap<>();
    replaces.put("1", "один");
    replaces.put("2", "два");
    replaces.put("3", "три");
    //Исходная строка
    String s = "1,2,3,4,5 ааа рпрмим";
    //Переводим исходную строку в массив символов
    char[] chars = s.toCharArray();
    //Триггер того, что мы до сих пор собираем число из цифр
    boolean isDig = false;
    //Буфер числа. Сюда будем добавлять поочередно цифры, пока не кончится число
    StringBuilder buffer = new StringBuilder();
    //Проходим по массиву исходных символов
    for (int i=0; i<chars.length;i++) {
        //Если символ = цифра
        if (Character.isDigit(chars[i])) {
            //Добавляем цифру в буфер
            buffer.append(chars[i]);
            //Устанавливаем триггер
            isDig = true;
        } else {
            //Если до этого была цифра
            if (isDig) {
                //Пытаемся получить из мапы значение, соотв. нашему числу
                //Если такое число есть, мапа передаст в переменную его словестный аналог, иначе null
                String word = replaces.get(buffer.toString());
                //Если мы что-то получили из мапы
                if (word != null)
                    //Заменяем в исходной строке число из буфера на слово
                    s = s.replaceAll(buffer.toString(), word);
                //Заново инициализируем буфер
                buffer = new StringBuilder();
            }
        }
    }

Интерфейс Map хранит данные в формате Ключ-значение. При этом, поиск по ключу занимает константное, достаточно короткое время (есть правда худший случай, когда за линейное, но здесь это не так важно).

READ ALSO
toggleSoftInput со значением ShowForced закрывает собой view

toggleSoftInput со значением ShowForced закрывает собой view

Добился того, чтобы клавиатура при появлении сдвигала Layout, который над ней, добавив в манифест android:windowSoftInputMode="adjustResize"Потом, мне понадобилось...

373
Объединение имени файла и пути

Объединение имени файла и пути

У меня есть путь вроде такого:

327
Как написать клиента для SOAP (web-service)

Как написать клиента для SOAP (web-service)

Собственно говоря есть такая задача, есть ресурс ( он не секретный - http://ruzditesteisnot

400
Как получить JSON-строку

Как получить JSON-строку

У меня есть JSON строка типа

245