2017-04-04 63 views
0

是否有辦法刪除第3列中不包含0-23之間值的行。我總共有18列,我正在使用bufferReader閱讀它。我從CSV文件中讀取的文件是表格。在列中刪除不包含特定值的行Java

public class CSVFileread { 
    private final ArrayList<String[]> Rs = new ArrayList<String[]>(); 
    private String[] OneRow; 

    public ArrayList<String[]> ReadCSVfile(File DataFile) { 
     try { 
      BufferedReader brd = new BufferedReader(new FileReader(DataFile)); 
      brd.readLine(); 
      while (brd.ready()) { 


       String st = brd.readLine().trim(); 


       OneRow = st.split(","); 
       Rs.add(OneRow); 

       System.out.println(Arrays.toString(OneRow)); 
      } 
     } 
     catch (Exception e) { 

      JOptionPane.showMessageDialog(null,"System couldn't find the csv file"); 
      //System.out.println("File not found:" + errmsg); 
     } 
     return Rs; 
    } 
} 
+3

爲什麼不只是檢查在第三列中的值,如果它不是有效的,不要將其添加到清單? –

+0

嘗試瞭解有關Java命名標準的知識 –

回答

0

試試這個:

while (brd.ready()) { 
    String st = brd.readLine().trim(); 

    OneRow = st.split(","); 
    int value = Integer.valueOf(OneRow[2]); 
    if (value < 0 || value > 23) { 
     Rs.add(OneRow); 
    } 

    System.out.println(Arrays.toString(OneRow)); 
} 

注:開頭的變量或方法的名稱時,您應該只使用小寫字母。大寫字母應該用於類名稱。

0

我建議你先把行分開,然後過濾出你不想存儲的行。像下面這樣:

List<String[]> rows = bufferedReader.lines() 
    .map(l -> l.trim().split(",")) 
    .filter(r -> Integer.valueOf(r[2]) >= 0 && Integer.valueOf(r[2]) <= 23) 
    .collect(Collectors.toList()); 

說了這麼多,我建議你創建一個類用的18列有意義的字段行,然後封裝在類的轉換和過濾邏輯。

因此,舉例來說,如果你的行表示學生那麼你的代碼將是這樣的:

class Student { 
    public static Optional<Student> fromCSV(String csvLine) { 
     String[] fields = csvLine.trim().split(","); 
     int age = Integer.valueOf(fields[2]); 
     ... 
     if (age >= 0 && age <= 23) 
      return Optional.of(new Student(..., age, ...)); 
     else 
      return Optional.empty(); 
    } 
} 

List<Student> students = bufferedReader.lines() 
    .map(Student::fromCSV) 
    .filter(Optional::isPresent).map(Optional::get); 
相關問題