2015-04-06 3 views
0
import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 

    public class extractvalues { 
     @SuppressWarnings("null") 
     public static void main(String [] args) 
     {  
      try{ 
       // command line parameter 
       FileInputStream fstream = new FileInputStream("c:/kdd.txt"); 

       // Get the object of DataInputStream 
       DataInputStream in = new DataInputStream(fstream); 
       //to Read values 
       BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
       String strLine; 


       //Read File Line By Line 
       while ((strLine = br.readLine()) != null) 
       { 
        System.out.println(strLine); 
        String[] splitted=null;  
        //split the given line into array of words seperated by comma    
        splitted=strLine.split(","); 

        int i=0; 
        //continue loop till it find "." since everyline contain "." in the end 
        while(!".".equals(splitted)) 
        { 
         //print each string one by one              
         System.out.println(splitted[i++]);         
        } 

       } 

       //Close the input stream 
       in.close(); 
      } 
      catch (Exception e) 
      {//Catch exception if any 
       System.err.println("Error: " + e.getMessage()); 
      } 
     } 

    } 

Я бегу 2 в то время как петля. Первый цикл будет читать строки за строкой из файла .txt, а второй while цикл будет читать каждую строку из строки. Но когда я запускаю цикл, он читает первую строку и строку, а затем останавливается. Я не понимаю, где я ошибаюсь. Мне не хватает чего-то, пожалуйста, помогите !., а внешний цикл работает один раз?

ответ

0

Изменить внутреннюю while петлю на это:

//Read File Line By Line 
while ((strLine = br.readLine()) != null) { 
    System.out.println(strLine); 
    String[] splitted=null;  

    //split the given line into array of words seperated by comma    
    splitted=strLine.split(","); 

    for (int i=0; i < splitted.length; ++i) { 
     if (splitted[i].equals(".")) 
      break; 

     //print each string one by one              
     System.out.println(splitted[i]); 
    } 
} 

Вы были ссылки на весь массив splitted вместо доступа к элементам внутри массива, причем последний, что вы на самом деле хотели сделать.

+0

Его работа прекрасна, спасибо. что было не так в моем коде? –

+0

Отметьте, что потребуется еще 3 минуты, прежде чем я смогу отметить. –

0

побежал ваш код в моей локальной машине и получил исключение в этой линии - ArrayIndexOutOfBounds

System.out.println(splitted[i++]);  
+0

Он должен выполнять итерацию по длине массива, чтобы избежать проблем, подобных тем, которые вы только что обнаружили. –

0

Проблема заключается в том, что расщепляется является String#Array, и вы не можете сравнить массив, как это, используя equals() метод

while(!".".equals(splitted)) ---> This is logically incorrect way !! 

Так Попробуйте forEach цикл и сравнить каждую строку в массив с .

for(String temp:splitted){ 
    if(temp.equals(".")) <-- Using equals for comparing 2 String 
     break; 
    System.out.println(temp); 
} 
+0

Фактически, его ввод находится в довольно странном формате, если каждая строка заканчивается символом «,.», Но это то, о чем говорится в этом вопросе. Если это так, то мы можем просто перебрать разбитую строку 'length - 1' раз, даже не проверяя период. –

+0

Мой набор данных - KDDcup99 –

0

Измените ваш внутренний во время цикла к этому, и убедитесь, что нет никакой необходимости

if (splitted[i].equals(".")) 

с последним индексом массива строк не только (.) Это имеет дополнительный характер тоже.

while ((strLine = br.readLine()) != null){ 
System.out.println(strLine); 
String[] splitted=null;  
//split the given line into array of words seperated by comma    
splitted=strLine.split(","); 
//continue loop till it find "." since everyline contain "." in the end 
for(int i=0;i<splitted.length;i++) 
{ 
System.out.println(splitted[i++]);         
} 
} 
Смежные вопросы