Я пытаюсь преобразовать текст, чтобы каждый четный символ стал заглавным. Это работает, но если между словами есть пробел, код также принимает пробел как символ. Так, например, если входной текст «это тест», то вывод «tHiS Is TEST». Я хочу, чтобы он игнорировал пробелы и выдавал "tIs iS 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
Thomas Devriese 28 Май 2017 в 15:47

2 ответа

Лучший ответ

Если вы хотите использовать альтернативную логику в цикле, вы обычно можете использовать i % 2 == 0 или (i & 1) == 1, но поскольку чередование является условным, вам нужна переменная для хранения «состояния». При простом чередовании переменная 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);
}

< EM> Тест

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

< EM> Выход

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);
}
4
Andreas 28 Май 2017 в 13:22
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);
    }
0
Ravindra 28 Май 2017 в 13:32