Убедиться, что EditText возвращает только одиночные строчные буквы - PullRequest
0 голосов
/ 16 декабря 2010

Я портирую свою старую Java-игру Hangman на Android для своих финалов по программированию в январе. Я получил большую часть его работы, но я обнаружил, что мой не делает никаких проверок для недопустимых символов. Недопустимые символы - это все, кроме строчных букв. Я думал о том, чтобы вручную ввести все допустимые символы в массив и проверить каждый ввод с этим. Есть ли более простой способ сделать это?

Вот код, который ловит ввод от соответствующего EditText:

final EditText guessedLetter = (EditText) findViewById(R.id.LetterInput);
final Button enterGuess = (Button) findViewById(R.id.GuessButton);
      enterGuess.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
            String guess = guessedLetter.getText().toString(); //Save text to a string
            guessedLetter.setText(""); //Clear EditText after input has been saved to a String
            editor.putString(GAME_LOGIC_GUESS, guess);
            editor.commit();
            Log.i(GAME_DEBUG, "Guess: " + guess + " parsed to guess()");
            guess();
            checkWin();
            updateDisplay();
            }
            }});

Еще раз спасибо!

Ответы [ 3 ]

0 голосов
/ 16 декабря 2010

Вы хотели бы сначала установить KeyListener, используя метод setKeyListener TextView. Затем вы должны переопределить метод onKeyDown установленного вами KeyListener и прослушать ввод. Если то, что набрано, НЕ является символом (то есть: A - Z), то вы бы выбросили ввод и отменили событие. Если то, что было напечатано, было символом, вы должны преобразовать символ в нижний регистр, прежде чем добавлять его в текстовое поле.

Редактировать -

Просто заметил, что вы не делаете это на нажатие клавиш, но вместо этого пользователь должен нажать «ОК». Это делает вашу жизнь проще.

Когда пользователь нажимает «ОК», проверьте, является ли текст допустимым символом (то есть: только один символ и находится между A - Z). Если это не так, кричать на пользователя. Если это так, либо проверьте строчные буквы, либо конвертируйте их в строчные.

http://developer.android.com/reference/android/widget/TextView.html#setKeyListener(android.text.method.KeyListener)

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Character.html#toLowerCase(char)

0 голосов
/ 16 декабря 2010

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

Вот массив, если он кому-нибудь понадобится в будущем:

final String[] allowedChars = {"a", "b", "c", "d", "e", 
                "f", "g", "h", "i", "j", 
                "k", "l", "m", "n", "o", 
                "p", "q", "r", "s", "t", 
                "u", "v", "w", "x", "y", 
                "z"};

Использование цикладля сравнения:

for(int n = 0; n < allowedChars.length; n++){
        if(allowedChars[n].equalsIgnoreCase(guess)){
        //Game logic here
        }}
0 голосов
/ 16 декабря 2010

Как насчет использования Character.isLowerCase (символ ch) или, альтернативно, Character.getType (ch) == LOWERCASE_LETTER

...