用于比较两个文本文件的最佳Java方法

时间:2015-11-06 07:27:30

标签: java file

我必须使用以下格式比较两个文件:

Manufacturer,Model,Key
----------------------
Honda,Civic,12
Honda,Civic,13
BMW,z3,14
BMW,X3,15
BMW,z3,16

只有当每个型号和制造商的密钥相同(相同的订单)时,文件才相同,但模型和制造商可以有不同的订单。 例如,上面提到的文件与:

相同
Honda,Civic,12
BMW,z3,14
Honda,Civic,13
BMW,z3,16
BMW,X3,15

但与Civic&#39键的不同顺序不一样:

Honda,Civic,13
Honda,Civic,12
BMW,z3,14
BMW,X3,15
BMW,z3,16

或(BMW z3键的值不同):

Honda,Civic,13
Honda,Civic,12
BMW,z3,16
BMW,X3,15
BMW,z3,16

编写一个能够以这种方式比较文件的java程序的最佳方法是什么?我知道最简单的方法是使用一些unix命令(使用sort来获取所有制造商,grep为每个制造商获取行,使用sort来获取所有模型和grep),但我必须使用Java。 解决方案:

  1. 阅读这些文件并将每行添加到地图>>结构,然后比较来自此结构的列表中的每个列表。它会起作用吗?如果昂贵/快速,每个文件中有100.000行?
  2. 尝试使用java代码模拟sort和grep命令(据我所知并不容易)。
  3. 为每个制造商的每个模型迭代文件(可能会有5.000次迭代) 有任何想法吗?
  4. 谢谢!

2 个答案:

答案 0 :(得分:2)

使用 <script> var map = L.map('map', { center: [41.8, 12.5], zoom: 5, zoomControl:true, maxZoom:15, minZoom:4, }); var feature_group = new L.featureGroup([]); var raster_group = new L.LayerGroup([]); var basemap = L.tileLayer('http://server.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}', { attribution: 'Tiles &copy; Esri &mdash; Source: Esri', }); basemap.addTo(map); function style1(feature) { return { weight: 2, radius: 10, opacity: 1, color: 'black', weight: 1, fillOpacity: 1, fillColor: 'red' }; } L.geoJson(villes, { style: style1, pointToLayer: function (feature, latlng) { return L.circleMarker(latlng).bindLabel( feature.properties.Name, {className: "ville", noHide: true }); } } ) .addTo(map) .showLabel; </script>. 。关键是制造商和型号,值是该组合的键列表(或整行,无关紧要)。我使用String是因为没有必要将这些东西解析为更具体的结构,但如果你更喜欢这个设计,你可以这样做。

将每个文件解析为这样的结构。如果之后,两个文件的映射相同,则文件是等效的。

答案 1 :(得分:0)

如果您要处理100000多行,则可以在每个品牌/型号的ID列表中使用java.util.zip.CRC32。一个Map<String,Checksum>,内存占用量很小,最后每个品牌/型号只需要进行一次比较。

相关问题