Java найти строку в тексте не работает - PullRequest
0 голосов
/ 28 марта 2011

Это образец .txt файла:

item1
item2
myString
item3
item4

Я создал класс для поиска строки в файле .txt:

public static String lineToFind;
public static boolean lineFound;
public static void findLine() throws IOException{
    try {
        lineFound=true;
        fstream = new FileInputStream("C:/Users/Franky/Documents/NetBeansProjects/JavaApplication5/src/Punteggi/squadre");
        in = new DataInputStream(fstream);
        br = new BufferedReader(new InputStreamReader(in));
        lineToFind = "myString";
        String strline;
        while(br.readLine()!=null)
        if(br.readLine()!=lineToFind){
        lineaFound=false;
        }
    } catch (FileNotFoundException ex) {
        Logger.getLogger(LeggiDaFile.class.getName()).log(Level.SEVERE, null, ex);
    }
}

этот класс используется вдругой класс, если lineaFound = false;

private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                     
    // TODO add your handling code here:
    findLine();
    if(lineFound=true){
    callFunction1();
    }
    if(lineFound=false){
    callFunction2();
    }
} 

Теперь проблема в том, что callFunction2() никогда не вызывается, даже если "myString" не включено в файл.Легко условие "false" никогда не происходит, даже если это должно произойти!Спасибо

Ответы [ 7 ]

3 голосов
/ 28 марта 2011

lineFound=false - это задание, а не тест.

Попробуйте

if (!lineFound)

или

if (lineFound == false)

вместо

if (lineFound=false)

и аналогично для if (lineFound=true)

Также следует помнить о автоматическом распаковывании в Java при использовании == или != с логическими значениями.

Boolean b = possiblyNullOrABoolean();
if (b == false) {
  ...
}

Тест с == имеет совсем другое значение, чем if (!b), когда тип b равен Boolean вместо boolean.

2 голосов
/ 28 марта 2011

Это ваша проблема:

String strline;
 while(br.readLine()!=null)
    if(br.readLine()!=lineToFind){
    lineaFound=false;
  }

Вы читаете строку дважды.И нельзя сравнивать строки со строкой, не используя equals ...

String strline;
while(strline = br.readLine()!=null)
    if(strline.equals(lineToFind)){
    lineaFound=false;
}

Существует также проблема присваивания из другого ответа.

1 голос
/ 28 марта 2011

Но в вашем коде есть несколько других серьезных ошибок. Например, если не каждая вторая строка файла соответствует строке, lineFound получит false.

1 голос
/ 28 марта 2011

Вам нужно использовать ==, а не =.

 if(lineFound==true){
    callFunction1();
    }
    if(lineFound==false){
    callFunction2();
    }

Вы также неправильно выполняете сравнение строк.

if(br.readLine()!=lineToFind) должно быть if(br.readLine().equals(lineToFind))

0 голосов
/ 28 марта 2011

Две проблемы, несмотря на уже упомянутое == вместо = и использование equals для сравнения строк и сравнения только каждой второй строки:

1 - цикл в findLine приводит к lineaFound = false, если последняя строка файла не "myString", независимо от того, является ли другая строка "myString" (также если используется equals).

    ...
    lineaFound = false;
    String strline;
    while ((strLine = br.readLine()) != null) {
        if (strLine.equals(lineToFind)) {
            lineaFound = true;
            break;  // we are done, exit the loop
        }
    }
    ...

2 - Почему вы используете DataInputStream?Это необходимо только для чтения данных, созданных DataOutputStream.

0 голосов
/ 28 марта 2011

Попробуйте заменить:

lineFound=true с

lineFound==true

и lineFound=false с

lineFound==false

То есть используйте == (оператор сравнения) вместо = (оператор присваивания)

0 голосов
/ 28 марта 2011

Все, что нужно приравнять к условию if( ), должно быть с ==, а не с =.

'=' is an assignment operator.  
'==' checks for the equivalence. 

Должно быть

if (lineFound == false)   

и т. Д. Для ошибок в том же контексте.

Кроме того, что такое LineaFound?

Изменить

LineaFound = false;

до

LineFound = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...