替换字母,但不能替换字符串中的特殊字符和大写字母(Java)

时间:2018-07-08 00:37:45

标签: java string replace

我可以将小写字母替换为下一个字母。特殊字符和大写字母不应更改,但我不知道如何更改。

/** 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 个答案:

答案 0 :(得分:1)

只需使用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

答案 1 :(得分:0)

您可以使用if条件来检查字母是否为小写。 另外,我使用Java 8 lambda函数来迭代字符串中的字符。

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();
}