Вот самый простой метод, который я могу придумать.
public String swapAO(String s) {
int a = s.indexOf('a');
int o = s.lastIndexOf('o');
if (a < 1 || o < 1) return s;
String beforeA = s.substring(0, a);
String between = s.substring(a + 1, o);
String afterO = s.substring(o + 1);
return beforeA + 'o' + between + 'a' + afterO;
}
Проще говоря, indexOf
и lastIndexOf
возвращают первые / последние позиции символа или отрицательное число, если символ нет. В коде говорится: «Найдите первые 'a'
и last 'o'
, затем возьмите части строки перед« a », between the
'a' and
'o' , and after the
'o' , and join them back together with the
«a» and
«o'` переключен».
NB: substring(from, to)
возвращает часть строки, начиная с from
и останавливая перед to
, т.е. from
включен, to
- нет. Кроме того, использование substring
более эффективно, чем преобразование в char[]
, а затем обратно к String
, потому что substring
не копирует текст из исходной строки, но использует тот же массив символов, что и исходная строка внутри.
Вы также можете использовать Regex, если хотите.
public String swapAO(String s) {
return s.replaceFirst("^([^a]*)a(.*)o([^o]*)$", "$1o$2a$3")
}
AFAIK, то, что вы спрашиваете, невозможно. И это не имеет значения, серверы должны быть идентичными репликами.