Заменить буквы, но не специальные символы и заглавные буквы в строках (Java)

TempCode спросил: 13 июня 2018 в 10:57 в: java

Я могу заменить строчные буквы на следующую букву. Специальные символы и буквы верхнего регистра не должны меняться, но я не могу понять, как это сделать.

/** Return s but with each occurrence of a letter in 'a'..'y'
 * replaced by the next letter and 'z' replaced by 'a'
 *
 * Examples: nextChar("") = ""
 * nextChar("abcz") = "bcda"
 * nextChar("1a$b") = "1b$c"
 * nextChar("AB") = "AB"
 * nextChar("love") = "mpwf"   */
public static String nextLetter(String s) {
    // TODO 3
    String next = "";
    for (char x: s.toCharArray()) {
        next += Character.toString((char)(((x - 'a' + 1) % 26) + 'a'));
    }
    return next;
}

2 ответа

Есть решение
Shar1er80 ответил: 13 июня 2018 в 11:18

Просто используйте оператор if, чтобы проверить, является ли символ строчной буквой, а затем продвигать ее до следующей буквы. Тип Character уже имеет Character.isLowerCase(), чтобы проверить, является ли символ строчной буквой.

Вы также можете выполнить проверку диапазона, например if ('a' <= character && character <= 'z') чтобы проверить, является ли буква строчной буквой.

Когда вы определяете букву в нижнем регистре, продвиньте ее до следующей буквы (Также проверьте, проходит ли символ "z", и переверните его обратно в "a", если он делает) и добавьте его к результату. Если это не строчная буква, вы просто добавляете ее к результату.

public class MyClass {
    public static void main(String args[]) {
        System.out.println(nextLetter("abcz1a$bABlove"));
    }    private static String nextLetter(String data) {
        String result = "";
        for (int i = 0; i < data.length(); i++) {
            char character = data.charAt(i);
            if (Character.isLowerCase(character)) {
                character++;
                // Account for rollover on 'z'
                if (character == '{') {
                    character = 'a';
                }
            }             result += character;
        }        return result;
    }
}

Результат

bcda1b$cABmpwf
Punit Mittal ответил: 13 июня 2018 в 11:36

Вы можете использовать условие if, чтобы проверить, является ли буква нижним регистром. Также я использовал функцию лямбда Java 8 для итерации по символам в строке.

public static String nextLetter(String s) {
    StringBuilder sb = new StringBuilder();    s.chars().forEach(c -> {
        if (Character.isLowerCase(c)) {
            sb.append((char) (((c - 'a' + 1) % 26) + 'a'));
        } else {
            sb.append((char)c);
        }
    });
    return sb.toString();
}

Дополнительное видео по вопросу: Заменить буквы, но не специальные символы и заглавные буквы в строках (Java)

50. Символы и строки в Java. Часть 1

Вывести символы строки в обратном порядке

Алгоритм переворота строки (String reverse)