重複する要素をCSVまたはJavaの他のファイルから削除する方法は?
公開: 2021-05-28ファイルから重複行を見つけることは難しい問題ではありません。 しかし、面接の質問で、人々は時々彼らが使わなければならない方法について非常に混乱することがあります。
このチュートリアルでは、CSVファイルやその他のファイルから重複を削除する方法について説明します。
始めましょう:
ステップ1。
ファイルCrunchifyFindDuplicateCSV
作成します
ステップ2。
- 以下のコードをファイルに入れます。
- BufferedReaderを使用してファイルを読み取ります。
- HashSetに行を追加することによって1つずつ。
- HashSetクラスは、ハッシュテーブル(実際にはHashMapインスタンス)に裏打ちされたSetインターフェイスを実装します。 セットの反復順序については保証されません。 特に、順序が時間の経過とともに一定に保たれることを保証するものではありません。 このクラスはnull要素を許可します。
- メソッドadd()を使用して、行がSetにすでに存在するかどうかを確認します。
- 指定された要素がまだ存在しない場合は、このセットに追加します。 より正式には、Objects.equals(e、e2)のような要素e2がこのセットに含まれていない場合、指定された要素eをこのセットに追加します。 このセットにすでに要素が含まれている場合、呼び出しはセットを変更せずに残し、
returns false
。
- 指定された要素がまだ存在しない場合は、このセットに追加します。 より正式には、Objects.equals(e、e2)のような要素e2がこのセットに含まれていない場合、指定された要素eをこのセットに追加します。 このセットにすでに要素が含まれている場合、呼び出しはセットを変更せずに残し、
- スキップすると、その行がスキップされた行として出力されます。
crunchify.csvファイル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
name city number age kedar kapan 9843875 23 sedai ktm 97798433 23 ayush kalopul 9856324 12 dipal ratopul 9842567 34 malla setiopul 1258496 33 ayush kalopul 9856324 12 babin karki hariyopul 32589 11 raju dhading 58432 44 sedai ktm 97798433 23 Crunchify , LLC PayPal . com Google . com Twitter . com FaceBook . com Crunchify , LLC Google . com Visa . com MasterCard . com Citi . com California Austin California |
CrunchifyFindDuplicateCSV.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
package crunchify . com . tutorial ; import java . io . BufferedReader ; import java . io . FileNotFoundException ; import java . io . FileReader ; import java . io . IOException ; import java . util . HashSet ; /** * @author Crunchify.com * How to Remove Duplicate Elements from CSV file in Java? */ public class CrunchifyFindDuplicateCSV { public static void main ( String [ ] argv ) { String crunchifyCSVFile = "/Users/Shared/crunchify.csv" ; // Reads text from a character-input stream, buffering characters so as to provide for the // efficient reading of characters, arrays, and lines. BufferedReader crunchifyBufferReader = null ; String crunchifyLine = "" ; // This class implements the Set interface, backed by a hash table (actually a HashMap instance). // It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will // remain constant over time. This class permits the null element. HashSet < String > crunchifyAllLines = new HashSet < > ( ) ; try { crunchifyBufferReader = new BufferedReader ( new FileReader ( crunchifyCSVFile ) ) ; while ( ( crunchifyLine = crunchifyBufferReader . readLine ( ) ) ! = null ) { if ( crunchifyAllLines . add ( crunchifyLine ) ) { crunchifyLog ( "Processed line: " + crunchifyLine ) ; } else if ( ! crunchifyIsNullOrEmpty ( crunchifyLine ) ) { crunchifyLog ( "--------------- Skipped line: " + crunchifyLine ) ; } } } catch ( FileNotFoundException e ) { e . printStackTrace ( ) ; } catch ( IOException e ) { e . printStackTrace ( ) ; } finally { if ( crunchifyBufferReader ! = null ) { try { crunchifyBufferReader . close ( ) ; } catch ( IOException e ) { e . printStackTrace ( ) ; } } } } // Check if String with spaces is Empty or Null public static boolean crunchifyIsNullOrEmpty ( String crunchifyString ) { if ( crunchifyString ! = null && !crunchifyString.trim().isEmpty()) return false; return true ; } // Simple method for system outs private static void crunchifyLog ( String s ) { System . out . println ( s ) ; } } // Linux command to remove duplicate lines from file: // $ sort -u /Users/Shared/crunchify.csv |

IntelliJIDEでJavaプログラムを実行してみましょう。
結果は次のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Processed line : name city number age Processed line : kedar kapan 9843875 23 Processed line : sedai ktm 97798433 23 Processed line : ayush kalopul 9856324 12 Processed line : dipal ratopul 9842567 34 Processed line : malla setiopul 1258496 33 --------------- Skipped line : ayush kalopul 9856324 12 Processed line : babin karki hariyopul 32589 11 Processed line : raju dhading 58432 44 --------------- Skipped line : sedai ktm 97798433 23 Processed line : Processed line : Crunchify , LLC Processed line : PayPal . com Processed line : Google . com Processed line : Twitter . com Processed line : FaceBook . com --------------- Skipped line : Crunchify , LLC --------------- Skipped line : Google . com Processed line : Visa . com Processed line : MasterCard . com Processed line : Citi . com Processed line : California Processed line : Austin --------------- Skipped line : California Process finished with exit code 0 |
このJavaプログラムが、CSVまたはその他のファイルの重複行を見つけるのに役立つことを願っています。
Linuxコマンドを使用してCSVで重複行を見つける方法は?
1 |
$ sort - u / Users / Shared / crunchify . csv |
結果: