#java #arrays #string
#java #массивы #строка
Вопрос:
По сути, то, что я пытаюсь сделать, — это очень простой экран входа в систему, чтобы познакомиться с swing.
Моя проблема в том, что в настоящее время у меня есть файл pass.txt
, который отформатирован следующим образом:
Username = bob,tony,mike
Password = pass,pass2,pass3
в моем Java-файле я получаю строки, используя:
String[] user = prop.getProperty("Username").split(",");
Теперь я сравниваю это с моим текстовым вводом из JTextField
однако это всегда приводит к сбою, что у меня есть:
if (input2.equals(pass) amp;amp; userin.getText().equals(user))
Теперь я предполагаю, что моя проблема в том, что у меня есть массив строк, и он сравнивает его с одной строкой. Теперь, что я хочу сделать, это просмотреть массив, и если какой-либо из них совпадает, я хочу, чтобы он взял это соответствие и использовал его, если это имеет смысл, есть ли какой-либо способ сделать это?
Комментарии:
1. Вам следует рассмотреть возможность использования одного из
Collection
классов, доступных в packagejava.util
, вместо массива строк.Collection
имеетcontains
метод, который может проверять наличие определенного элемента в коллекции.
Ответ №1:
я думаю, это может вам помочь, потому что я думаю, что вы должны проверять каждого пользователя с его паролем в этом массиве:
for(int i=0;i < user.size();i ){
if(input2.equals(pass[i]) amp;amp; userin.getText().equals(user[i])){
//your code
}
}
Ответ №2:
Предполагая, что у вас есть pass
массив, соответствующий вашему user
массиву, и каждая запись в user
гарантированно будет иметь соответствующую запись в pass
, тогда следующее решение должно работать:
int index = Arrays.asList(user).indexOf(userin.getText());
String password = pass[index];
if (password.equals(input2)) {
// Successful authentication
} else {
// Authentication failed
}
Arrays.asList(user).indexOf(userin.getText())
получит индекс
пользователь в списке (в вашем примере «bob» => 0; «tony» => 1; «mike» => 2).password
тогда является ли строка пароля с тем же индексом (в вашем примере «pass» => 0; «pass2» =>1; «pass3» => 2).- Затем if сравнивает пароль, связанный с пользователем (
password
), с паролем, который был введен в диалоговом окне (input2
).
Комментарии:
1. Небольшой комментарий к тому, что это на самом деле делает:
Arrays.asList(x)
преобразует массивx
вjava.util.List
, при этом все элементы списка отображаются в том же порядке, в каком они появились в массиве.indexOf
это метод вList
, который возвращает первый индекс, в котором найден данный элемент, или-1
если данный элемент отсутствует в списке. Обратите внимание, что приведенный выше код фактически завершит работу сArrayIndexOutOfBoundsException
, если заданного имени пользователя нет вuser
массиве, потому что в строке 2 вы будете индексировать вpass
массив с помощью-1
.
Ответ №3:
Вам придется выполнить поиск в таблице username, найти позицию введенного имени пользователя, а затем проверить, совпадает ли пароль в этой позиции с тем, который ввел пользователь.
Ответ №4:
Вы должны каким-то образом выполнить поиск в массиве для искомой строки. Существует множество способов сделать это, я опишу один метод.
int index = 0;
for (String s : user) {
if (s.equals(userin.getText()) {
// the username matches! now check to see if the password at the _same index_ matches
if (pass[index].eqals(input2.getText()) {
// correct username and password!
} else {
// bad password!
}
}
index;
}
Я предполагаю, что у вас есть вызываемый массив паролей pass
и что индексы соответствуют индексам user
массива. ( user[i]
пароль pass[i]
)