tokenizer prorównanie tekstu pobranego do typu String

1

Witam mam problem mam skrypt do czytania pliku txt wyraz po wyrazie, co należy zrobić, żeby pobrany wyraz porównać z typem String?

mport java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import java.io.StreamTokenizer;

public class Main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args)
{
  FileReader fr = null;
  String linia = "";

    int wartosc = 0;

// OTWIERANIE PLIKU:
try {
fr = new FileReader("F:\test.txt");
}
catch (FileNotFoundException e) {
System.out.println("BŁĄD PRZY OTWIERANIU PLIKU!");
System.exit(1);
}

String zmienna = null;
StreamTokenizer st = new StreamTokenizer(fr);
//ODCZYT KOLEJNYCH "TOKENÓW" Z PLIKU:
try {
while( (wartosc = st.nextToken()) != StreamTokenizer.TT_EOF ){
if(wartosc == StreamTokenizer.TT_WORD)
{
zmienna = st.sval;
System.out.println(zmienna);

              //Nie wiem dlaczego nie działa warunek?
              if(zmienna == "przykLadowy_wyraz")
                {
                    System.out.print(st.sval);
                }
          }
           else if(wartosc == StreamTokenizer.TT_NUMBER)
          {
                System.out.println(st.nval);
          }
     }
   
 }
 catch (IOException e) {
        System.out.println("BŁĄD ODCZYTU Z PLIKU!");
        System.exit(2);
  }

// ZAMYKANIE PLIKU
try {
fr.close();
} catch (IOException e) {
System.out.println("BŁĄD PRZY ZAMYKANIU PLIKU!");
System.exit(3);
}
}
}

0

zmienna.equals("przykladowy_wyraz")

0

Porównanie poprzez == to porównanie referencji do obiektów (czy to jest TEN sam obiekt) a metoda equals() powoduje porównanie zawartości dwóch obiektów.

0

@[losowa nazwa], tylko, że w przypadku klasy String to jest trochę bardziej skomplikowane. W środku siedzi wzorzec flyweight i w niektórych przypadkach == będzie działać tak samo jak equals().

public class App{
	public static void main(String[] args) {
		String a = "a";
		String aa = "a";
		String aaa = new String("a");
		System.out.println(a==aa);
		System.out.println(a.equals(aa));
		System.out.println(a==aaa);
		System.out.println(a.equals(aaa));
	}
}
0

@[losowa nazwa], tylko, że w przypadku klasy String to jest trochę bardziej skomplikowane. W środku siedzi wzorzec flyweight i w niektórych przypadkach == będzie działać tak samo jak equals().

public class App{
	public static void main(String[] args) {
		String a = "a";
		String aa = "a";
		String aaa = new String("a");
		System.out.println(a==aa);
		System.out.println(a.equals(aa));
		System.out.println(a==aaa);
		System.out.println(a.equals(aaa));
	}
}
0

@Koziołek: Masz rację, że w przypadku porównywania Stringów, które są znane na etapie kompilacji trzeba być świadomym tego udogodnienia. Natomiast w ogólnym wypadku nie metoda equals() i tak zadziała, więc żeby nie mącić, to lepiej ją po prostu stosować. Btw, nie wiedziałem, że tak się nazywa ten wzorzec. Dzięki za info.

1 użytkowników online, w tym zalogowanych: 0, gości: 1