У меня есть приложение с EditText
и кнопка с именем «вперед». Все, что я хочу, это просто, когда я набираю «a» в EditText
и нажимаю кнопку, для ввода EditText
«b» в EditText
, «c», если нажать снова и так далее. Я пытался:
value = edt.getText(); edt.setText(value + 1);
Но это, конечно, напечатает начальную строку, за которой следует число «1». Есть идеи? большое спасибо
Протестировано и работает
Все буквы могут быть представлены их значениями ASCII .
Если вы передадите буквы в int
, добавьте 1, а затем вернитесь к char
, письмо увеличится на 1 ASCII-значение (следующая буква).
Например:
'a'
– 97
'b'
– 98
Поэтому, если вход был 'a'
и вы выбрали его для int
, вы получите 97
. Затем добавьте 1 и получите 98
, а затем, наконец, снова верните его на char
и получите 'b'
.
Вот пример кастинга:
System.out.println( (int)('a') ); // 97 System.out.println( (int)('b') ); // 98 System.out.println( (char)(97) ); // a System.out.println( (char)(98) ); // b
Итак, ваш окончательный код может быть следующим:
// get first char in the input string char value = et.getText().toString().charAt(0); int nextValue = (int)value + 1; // find the int value plus 1 char c = (char)nextValue; // convert that to back to a char et.setText( String.valueOf(c) ); // print the char as a string
Конечно, это будет работать только в том случае, если в качестве входного сигнала будет один символ.
Проще было бы:
char value = edt.getText().toString().charAt(0); edt.setText(Character.toString ((char) value+1));
Здесь value + 1
добавляет десятичный эквивалент символа и увеличивает его на единицу. Вот небольшая диаграмма:
Что происходит после «z»? … это не сбой .. см. Здесь полный график. ,
Попробуй это
String convertString = getIncrementStr("abc"); public static String getIncrementStr(String str){ StringBuilder sb = new StringBuilder(); for(char c:str.toCharArray()){ sb.append(++c); } return sb.toString(); }
String value = edt.getText(); edt.setText(value + 1);
Если приведенный выше код является вашим кодом, то то, что вы делаете, является конкатенацией 1 до конца строки value
. Таким образом, нажатие кнопки изменит отображаемый текст от «вашего текста» до «вашего текста1». Этот процесс будет продолжаться при следующем нажатии кнопки, чтобы показать «ваш текст11». Проблема – действительно ошибка типа.
Вам нужно преобразовать текстовое значение (символ) в значение ascii, а затем увеличить его, а не только текст.
value = edt.getText().toString(); int ascii = (int)value; edt.setText(Character.toString ((char) ascii+1));
Попробуй это:
edt.setText(Character.toString((char)(edt.getText().charAt(0) + 1)));