如何在java中有效地将字符串中的所有其他字母大写?

时间:2015-03-09 01:17:44

标签: java

我目前正在处理代码搜寻级别6.02中的问题,该问题要求我将字符串中的所有其他字母大写。我已尝试使用toCharArray + StringBuilder for for循环。它有效,但还不够好。我仍然无法得到问题的完美分数。我的想法已经不多了。任何帮助将不胜感激。

注意:这是我关于堆栈溢出的第一篇文章。所以,如果我错过了什么或以错误的方式提问。请随时为我指出。谢谢。

s是输入字符串

尝试1:

    char [] words = s.toCharArray();
    for (int i = 0; i < words.length; i +=2){
        words[i] = Character.toUpperCase(words[i]);
    }
    return new String(words);

尝试2:

    StringBuilder result = new StringBuilder(s);
    for (int i = 0; i < result.length(); i +=2){
        result.replace(i, i + 1, result.substring(i,i + 1).toUpperCase());
    }
    return result.toString();

输入:“iaiaa”

预期产出:“IaIaA”

2 个答案:

答案 0 :(得分:0)

在你的两次尝试中,你都会经历2 1/2次角色。

第二次尝试;

StringBuilder result = new StringBuilder(s);
for (int i = 0; i < result.length(); i +=2){
    result.replace(i, i + 1, result.substring(i,i + 1).toUpperCase());
}
return result.toString();

第一行复制所有字符,最后一行复制所有字符。你的for循环遍历了一半的字符,共有2 1/2组字符。

我不知道这是否更快,但这是我的尝试。

String r = "";
for (int i = 0; i < s.length; i++) {
    if (i % 2 == 0) {
        r += s.substring(i, i + 1).toUpperCase();
    } else {
        r += s.substring(i, i + 1);
    }
}
return r;

我意识到这看起来像是创建了很多中间字符串,但是自Java 1.7以来字符串连接已经有所改进。

答案 1 :(得分:0)

我不知道这究竟有多高效,但是这样做可以将首字母和其他所有字母大写。

    String sentence = "i want to manipulate this string";
    char[] array = new char[] {};

    array = sentence.toCharArray(); //put the sentence into a character array

    for (int i = 0; i < array.length; i += 2) {
        if (array[i] == ' ') { //if the character is blank, move to the next index
            i++;
        }
        array[i] = Character.toUpperCase(array[i]); //capitalize

    }

    sentence = new String(array); //revert array back to String
    System.out.println(sentence); //display