Почему .equals возвращает false при сопоставлении идентичных строк? - PullRequest
0 голосов
/ 13 марта 2020

я пытаюсь сравнить строку, являющуюся частью файла для чтения (файл: пример файла для чтения

1.Dog
2.Cat
3.Bird

4), с заданным пользователем вводом, используя .equals. Он всегда возвращает false, даже когда я копирую вставленную строку.

Код:

File TF = new File("Textfile.txt");Scanner read = new Scanner(TF);
String text="";
 while(read.hasNextLine()) {
        text = text.concat(read.nextLine()+"\n");
    }
    int x;
    int y;
    char a;
    char b;
    Random dice = new Random();
    x=dice.nextInt(3)+1;
    y=x+1;
    a=(char)(x+48);
    b=(char)(y+48);
    int first = text.indexOf(a);
    int second = text.indexOf(b);
    String some=text.substring(first,second);
    Scanner write = new Scanner(System.in);
    String writein=write.nextLine();
    System.out.println(writein.equals(some))

Ответы [ 2 ]

1 голос
/ 13 марта 2020

text.substring(first,second) возвращает строку, содержащую разрыв завершающей строки, например, "1.Dog \ n", тогда как введенная строка не будет. Чтобы это исправить, вы можете обрезать строку, прочитанную из файла:

String some=text.substring(first,second).trim();
0 голосов
/ 13 марта 2020

Переменная some оканчивается на \n (или, возможно, \r\n на Windows). writein с другой стороны не имеет завершающей строки. При сравнении строк каждый символ должен быть одинаковым (что не так).

У вас есть несколько возможных решений для решения вашей проблемы. Одним из них является вызов stripTrailing() для вашей строки (Java> = 11).

System.out.println(writein.equals(some.stripTrailing()))

Или вы можете вручную уменьшить длину строки

String some=text.substring(first, second - 1);
...