Найдите конкретное слово и замените его перед "буквой", а не после

У меня есть алфавит, который я хочу заменить до любого алфавита, а не после. Например, если у меня есть слово "Instant", я хочу убедиться, что символ "a" после "t" должен быть перед "t". Это должно быть безразличным. Везде, где у любого слова есть "а", его следует заменить до, но не после. Есть ли выход из этого?

3 ответа

Решение

Вы привели только один пример, поэтому я не могу опубликовать общий ответ. Может быть, вы можете обобщить это:

String input = "instant";
String replaced = input.replaceAll("(\\w)a", "a$1");

Вы можете использовать регулярные выражения, чтобы делать то, что вы хотите.

В общем случае вы хотите заменить <something>a от a<something> где <something> это один символ, любой символ.

В регулярных выражениях это заменяет (\\w)a от a$1найти случаи, когда a предшествует что-то и захватывает это что-то. Затем замените его на a с последующим захватом чего-то:

public static void main(String[] args) throws Exception {
    final String s = "instant";
    System.out.println(s.replaceAll("(\\w)a", "a$1"));
}

Выход:

insatnt

Путь старой школы будет примерно таким:

char reference_char = 'a';
String old_string = "instant";

char[] test_array = old_string.toCharArray();        
int i = 0;

for (char c : test_array) {
    if (i > 0) {
        if (c == reference_char) {
            test_array[i] = test_array[i - 1];
            test_array[i - 1] = reference_char;
        }
    }
    ++i;
}

String new_string =  new String(test_array);
System.out.println(new_string);

Надеюсь, я понял ваш вопрос.

Всего наилучшего!

Другие вопросы по тегам