2013-09-25 1 views
0

У меня есть некоторая проблема. Здесь я хочу использовать строку [] внутри строки.contains(), ранее я пытаюсь использовать один код, если я помещаю string.contains (String), он читает ключевые слова, но я могу просто ввести одно ключевое слово за раз. Итак, я пытаюсь сгруппировать ключевое слово в массиве, но главная проблема заключается в том, что line.contains() не может читать String [].Найдите определенную строку, соответствующую определенному массиву ключевого слова, используя line.contains()

Вот код: -

package components; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class matchWord { 

    public static void main(String[] args) { 
     File file = new File("file.txt"); 
     String[] errorType = {"uuid=A5H50AV_promo1, for domain=null", "Start node"}; 
     Scanner scanner = null; 
     try { 
      scanner = new Scanner(file); 
     } catch (FileNotFoundException ex) { 
      System.out.println("File not found"); 
     } 

     int count = 0; 
     //now read the file line by line 
     for (int i = 0; i < errorType.length; i++) { 
      while (scanner.hasNextLine()) { 
       String line = scanner.nextLine(); 
       //it doesn't read the errorType[i] as i can see that the count=0 
       if (line.contains(errorType[i])) { 
        count++; 
        if (count == 1) { 
         System.out.println("Error Description :" + line); 
        } 
       } 
      } 
     } 

     System.out.println("Error Type : " + errorType + "\nCount : " + count); 
     scanner.close(); 
    } 
} 

Кто-то пожалуйста, помогите, спасибо много.

+1

Пожалуйста, добавьте образец ввода и вывода. –

ответ

1

переставляем для и в то время как петли:

//now read the file line by line 
    while (scanner.hasNextLine()) { 
     String line = scanner.nextLine(); //also be sure to put this outside the for loop 
     for (int i = 0; i < errorType.length; i++) { 
      if (line.contains(errorType[i])) { 
       count++; 
       if (count == 1) { //also this 
        System.out.println("Error Description :" + line); 
       } 
      } 
     } 
    } 

Проблема заключалась в том, что внешняя петля interating над сообщения об ошибках, чтобы проверить, а внутренняя петля итерацию по линиям Fo файла.

Итак, в первом цикле программа проверит все строки в файле против первого элемента массива, пройдя весь путь до конца файла. Начиная со следующего цикла, сканер уже находился на конце в конце файла, поэтому он больше не мог читать - поэтому внутренний цикл даже не выполнялся один раз ...

Кроме того, это кажется вонючим :

if (line.contains(errorType[i])) { 
    count++; 
    if (count == 1) { //also this 
     System.out.println("Error Description :" + line); 
    } 
} 

условие count == 1 будет верно раз только. Печатается только первое сообщение об ошибке. Если вам нужны все сообщения об ошибках (как это казалось бы логичным), вы, вероятно, следует обрабатывать эту часть так:

if (line.contains(errorType[i])) { 
    count++; 
    System.out.println("Error number: " + count + " Error Description :" + line); 
} 
0

Изменить код на следующий

 int count = 0;   
     while (scanner.hasNextLine()) { 
      String line = scanner.nextLine();      
      if (Arrays.asList(errorType).contains(line)) { 
       count++; 
       if (count == 1) { 
        System.out.println("Error Description :" + line); 
       } 
      } 
     } 

Вместо

 for (int i = 0; i < errorType.length; i++) { 
     while (scanner.hasNextLine()) { 
      String line = scanner.nextLine(); 
      //it doesn't read the errorType[i] as i can see that the count=0 
      if (line.contains(errorType[i])) { 
       count++; 
       if (count == 1) { 
        System.out.println("Error Description :" + line); 
       } 
      } 
     } 
    } 
+0

строка содержит отличается от списка. Хотя ваш код выглядит хорошо, он делает что-то другое, чем кажется, кажется, автору. Это означает, что строка литерно содержится в ошибках. – extraneon