Я пытаюсь проверить мой jtextfeild, чтобы ввести только денежную стоимость. которые включают только числовые и полные остановки. экс-17652,50
Поэтому я попробовал этот метод. Но пока он выполняется, я получил это java.lang.ArrayIndexOutOfBoundsException: 1
Вот этот метод.
private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {
try {
char c = evt.getKeyChar();
String mny[] = jTextField1.getText().split("\\.");
if (!((c >= '0') && (c <= '9') || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE) || (c == KeyEvent.VK_ENTER) || (c == KeyEvent.VK_TAB) || (c == KeyEvent.VK_NUM_LOCK) || (c == '.'))) {
getToolkit().beep();
evt.consume();
}
if (mny[1].length() == 2) {
getToolkit().beep();
evt.consume();
}
} catch (Exception e) {
e.printStackTrace();
}
}
Я получаю параметр Array Index Out of Bounds Exception после ввода первого числа в textfeild. Насколько я понимаю, это происходит потому, что mny [o] должен произойти после того, как я вхожу в полный оборот. Но я не могу найти решение. Пожалуйста, помогите мне. Спасибо.
Нет, в вас нет точки ввода. String mny[] = jTextField1.getText().split("\\.");
будет возвращать массив только с одним элементом. Массивы в java основаны на нуле. Таким образом, mny[1].length()
будет генерировать mny[1].length()
ArrayIndexOutOfBoundsException
.
Вы должны проверить здесь, если ваш массив имеет размер 2
if (mny.length > 1 && mny[1].length() == 2) {
Вы можете изменить свое состояние на:
if (mny.length > 1 && mny[1].length() == 2) {
getToolkit().beep();
evt.consume();
}
(или что-то подобное, в зависимости от требуемой логики)