Сравнение строки с массивом строк

#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 классов, доступных в package java.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] )