将偶数字符设为大写,但跳过空格

时间:2017-05-28 12:47:12

标签: java arrays string character

我正在尝试转换一些文本,以便每个偶数字符都变为大写。这样可行,但如果单词之间有空格,则代码也会将空格作为字符。因此,例如,如果输入文本是“这是一个测试”,则输出为“tHiS is tEsT”。我希望它忽略空格并将“tHiS iS a TeSt”作为输出。

我现在有以下代码:

private String result;
private String letter;

private void generateText() {

    result = "";

    String input = editTextInput.getText().toString();
    String lowerCase = input.toLowerCase();
    char[] charArray = lowerCase.toCharArray();

    for(int i=0;i<charArray.length;i++){
        if(String.valueOf(charArray[i]).equals(" ")){
            //I don't know what to put here
            letter = String.valueOf(charArray[i]);
        }else{
            if(i%2 == 0){
                letter = String.valueOf(charArray[i]);
            }else if(i%2 == 1){
                letter = String.valueOf(charArray[i]).toUpperCase();
            }
        }


        result += letter ;
    }

    Log.d("result", result);
}

跳过这些空格我该怎么办? 如果可能的话,我也想跳过标点符号,或者一般来说,每个字符都不是字母。

提前致谢!

(对于那些想知道的人,我正在制作一个海绵宝宝文本生成器应用程序)

2 个答案:

答案 0 :(得分:4)

如果你想在循环中执行备用逻辑,通常可以使用i % 2 == 0(i & 1) == 1,但由于交替是有条件的,你需要一个变量来存储&#34;状态& #34 ;.通过简单的交替,boolean变量是显而易见的选择。

此外,不断将每个char转换为String对性能不利。只需更新char[]

private static String upperEven(String input) {
    char[] buf = input.toLowerCase().toCharArray();
    boolean upper = false;
    for (int i = 0; i < buf.length; i++) {
        if (Character.isLetter(buf[i])) {
            if (upper)
                buf[i] = Character.toUpperCase(buf[i]);
            upper = ! upper;
        }
    }
    return new String(buf);
}

测试

System.out.println(upperEven("this IS a TEST"));

输出

tHiS iS a TeSt

代码可以压缩/隐藏到:; - )

private static String upperEven(String s) {
    char[] c = s.toCharArray();
    boolean t = false;
    for (int i = 0; i < c.length; i++)
        if (Character.isLetter(c[i]))
            c[i] = ((t = ! t) ? Character.toLowerCase(c[i]) : Character.toUpperCase(c[i]));
    return new String(c);
}

答案 1 :(得分:0)

This is my solution.

private static void generateText() {
        String result = "";
        String input = "i am a engineer and student of nit.";
        String lowerCase = input.toLowerCase();
        Boolean isLower = false;
        char[] charArray = lowerCase.toCharArray();
        for (int i = 0; i < lowerCase.length(); i++) {
            String letter = String.valueOf(charArray[i]);
            if (!Character.isLetter(charArray[i])) {
                result += letter;
            } else {
                if(isLower)
                    letter = letter.toUpperCase();
                result += letter;
                isLower = !isLower;
            }
        }
        System.out.println(result);
    }