Не могу сравнить значение ячейки LinkedList со строкой

Имеется код:

package com.company;

import java.io.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Main {

    static LinkedList<Character> chars = new LinkedList<Character>();
    static LinkedList<String> strings = new LinkedList<>();
    static LinkedList<Integer> ints = new LinkedList<>();
    static LinkedList<String> intsName = new LinkedList<>();

    static boolean isOut = false;

    static boolean isInt = false;
    static boolean isIntName = false;
    static boolean isEq = false;


    public static void main(String[] args) {
        System.out.print("Enter path: ");

        Scanner scanner = new Scanner(System.in);
        String path = scanner.nextLine();

        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader(path));
            int c;
            while ((c = br.read()) != -1) {
                chars.add((char) c);
            }
            br.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }


            mainLg();
        }
    }
    public static void mainLg(){
        StringConv();
        for (int i = 0; i < strings.size(); i++){

            if (strings.get(i).equals(" ")){

            } else if (isInt){
                intsName.add(strings.get(i));
                isInt = false;
                isIntName = true;
            } else if (isIntName){
                isEq = true;
                isIntName = false;
            } else if (isEq){
                ints.add(Integer.parseInt(strings.get(i)));
                isEq = false;
            } else if (isOut){
                isOut = false;
                Out(strings.get(i));
            }

            if (strings.get(i).equals("int")){
                isInt = true;
            }

            if (strings.get(i).equals("Out")){
                isOut = true;
            }
            System.out.println(strings.get(i));

        }


    }

    public static void StringConv(){
        String name = "";
         for (int i = 0; i < chars.size(); i++){
             if (chars.get(i) != ' ' && chars.get(i) != ';'){
                 name += chars.get(i);
             } else {
                 strings.add(name);
                 strings.add(" ");
                 name = "";
             }
         }
    }

    public static void Out(String x){
        for (int i = 0; i < intsName.size(); i++){
            if (intsName.get(i).equals(x)){
                System.out.println(ints.get(i));
            }
        }
    }
}

Я считываю посимвольно текстовый документ в котором содержится это:

int h = 8755;
Out h;

И записываю каждый отдельн6ый символ в LinkedList chars. Затем с помощью метода StringConv преобразую символы chars в слова и каждое слово записываю в LinkedList strings. Проблема заключается в том, что в методе mainLg когда я сравниваю значение ячейки LinkedList strings со строкой "Out", метод equals всегда возвращает false. Если же выводить каждую ячейку strings, то можно заметить что строка out там присутствует. Строка Out присутствует!

Но все равно метод equals возвращает false при сравнении ячейки strings и строки Out, хотя последняя там явно присутствует.


Ответы (1 шт):

Автор решения: Zhantemir Yermekov

Глубоко не разбирался в Вашем коде, но Ваша проблема в том что строка содержит пробелы, решится она если используете метод trim() http://proglang.su/java/strings-trim например, он грубо говоря убирает пробелы слева и справа строки, но не внутри самой строки.

if (strings.get(i).trim().equals("Out")){
                isOut = true;
            }

Или можно использовать метод contains() https://javahelp.online/osnovy/metod-contains-java он проверяется содержится ли подстрока в строке.

if (strings.get(i).contains("Out")){
                    isOut = true;
                }

Эти два решения решают последствия проблемы, а не саму проблему. Текущий механизм работы усложнен, могу порекомендовать использовать не посимвольное чтение, а построчное https://javadevblog.com/kak-postrochno-schity-vat-fajl-v-java.html. То есть у Вас будет список строк. Затем к каждой строке применить split() по пробелу https://javarush.ru/groups/posts/2907-metod-split-v-java-delim-stroku-na-chasti и в итоге у Вас будет список слов каждой строки. Мне кажется это облегчит общий механизм, но конечно могу ошибаться.

→ Ссылка