2016-11-28 9 views
-1
ID  Number 
ssk , 0 
ssk , 999999 
ssk , 0 
oit , 999999 
dnp , 54 
dnp , 2 
dnp , 999999 

上記は、私が読んでいるcsvファイルの短縮版の例です。私の意図は、指定された行に0があるかどうかを確認することです。その場合は、IDのすべての外観を空のStringに置き換えます。同様に、最小値のIDは0でなくても保持します。現在のプログラムを変更して、出力を得る方法を教えてください。私はあらゆる解決策に開放されており、私は雇用の場でこれを何時間も働いています。ありがとうございました。2次元配列の複数の値を検索して置換するJava

ID  Number 
    , 0 
    , 999999 
    , 0 
oit , 999999 
    , 54 
dnp , 2 
    , 999999 

私の現在のプログラムは以下の通りです出力を望んでいた。=============================== =====================

 import java.io.*; 
     import java.lang.reflect.Array; 
     import java.util.*; 

     public class ImapSync{ 

      public static void main(String[] args) throws IOException { 
       FileReader fr = new FileReader("Sync report.csv"); 
       Scanner sc = new Scanner(fr); 
       String[][] array = new String [101000][2]; 
       int i = 0; 

       while(sc.hasNext()){ 
        String line = sc.nextLine(); 
        String field[] = line.split(","); 
        //   System.out.println(field[5]); 
        for(int j = 0; j < 2; j++){ 
         //    System.out.println(field[5] + " " + i); 
         array[i][j] = field[j]; 
        } 
        i++; 
       } 
       sc.close(); 
       Commands c = new Commands(array); 

       c.changeArrayValues(); 
     //  c.print(); 
       c.arrayToFile(); 
      } 




     } 


    import java.io.File; 
    import java.io.IOException; 
    import java.io.PrintWriter; 
    import java.lang.reflect.Array; 
    import java.util.Arrays; 

    public class Commands { 
     private String array[][]; 

     public Commands(String array[][]){ 
      this.array= array; 
     } 
     public void print(){ 
      for(int i = 0; i < array.length; i++){ 
       for(int j = 0; j < 2; j++){   
        if(j == 0) 
         System.out.printf("%-70s " , array[i][j]); 
        else 
         System.out.printf("%-20s ", array[i][j]); 
       } 
       System.out.println(); 
      } 
     } 

     public void arrayToFile() throws IOException{ 
      File f = new File("C:/Users/abc.csv"); 
      PrintWriter p = new PrintWriter(f); 

      for(int i = 0; i < 100981; i++){ 
       for(int j = 0; j < 2; j++){ 
        p.print(array[i][j] + ","); 
       } 
       p.println(); 
      } 
      p.close(); 
     } 

     public void changeArrayValues(){ 
      int arrayPosition = 0; 
      while(arrayPosition < 100981){ 
       if(Integer.parseInt(array[arrayPosition][1]) == 0){ 
        String userID = array[arrayPosition][0]; 

        for(int i = 0; i < 100981; i++){ 
         if(array[i][0] == userID){ 
          array[arrayPosition][0] = ""; 
         } 
        } 
       } 
       arrayPosition++; 
      } 
     } 

    } 
+3

そして、あなたの質問は... –

答えて

0

は、以下で、既存の「changeArrayValues」メソッドを交換し、それはあなたのために働くかどうか、私に知らせてください:

public void changeArrayValues(){ 
    int arrayPosition = 0; 
    while(arrayPosition < array.length){ 
      if(array[arrayPosition][1] != null && Integer.parseInt(array[arrayPosition][1].trim()) == 0){ 
       String userID = array[arrayPosition][0].trim(); 
       for(int i = 0; i < array.length; i++){ 
        if(array[i][0] != null && array[i][0].trim().equals(userID)){ 
         array[i][0] = ""; 
        } 
       } 
      }else if (array[arrayPosition][0] != null && !array[arrayPosition][0].equals("")) { 
       String userID2 = array[arrayPosition][0].trim(); 
       int min = Integer.parseInt(array[arrayPosition][1].trim()); 
       for (int j=0;j<array.length;j++){ 
        if (array[j][0] != null && array[j][1] != null){ 
         if(array[j][0].equals(userID2) && Integer.parseInt(array[j][1].trim()) < min){ 
          min = Integer.parseInt(array[j][1].trim()); 
          array[arrayPosition][0] = ""; 
         } else if (array[j][0].equals(userID2) && Integer.parseInt(array[j][1].trim()) > min) 
          array[j][0] = ""; 
        } 
       } 
     } 

     arrayPosition++; 
    } 
} 
+0

私はNULLポインタを受け取りますこの行のif(array [j] [0] .equals(userID2)&& Integer.parseInt(array [j] [1]) Jim

+0

上記の編集されたコードでnull値を処理しました。今すぐお試しください、それがあなたのために働く場合、私に知らせてください。 – Mahipal

+0

これは完璧に機能しました!ありがとうございました。 – Jim

0
私は本当にこの:)

List<String> list = new ArrayList<String>(); 
String holdKey = "The most strange value you can get"; 
String[] splited = new String[2]; 
boolean zeroFound; 

while ((line = br.readLine()) != null) 
    list.add(ch); 

for(int i=list.size()-1;i>=0;i--) { 
    splited = list[i].split(","); 

    if (!holdKey.equals(splited[0]) {   //checks key changes 
     //previus item has to be updated, and previus is +1 
     list[i+1] = (zeroFound?" ":holdKey) + ", " + splited[1];  
     holdKey = splited[0]; 
    } 

    //check if value is zero, after ofc. 
    zeroFound |= "0".equals(trim(splited[1])); 

} 

//Finally finish with the 1st item 
list[0] = (zeroFound?" ":holdKey) + ", " + splited[1]; 
を行うには、約200の方法を見ることができます

私はdidnの」コードを実行してバグがあるかもしれないので... [tab]がエディタでの作業...

関連する問題