比较不在java中工作的文件中的值
目前我遇到了一个关于比较文本文件中的值的问题。以下是我的要求,这是一个有点独特的是我可以说 我得到一个文本文件,其中包含以下格式的数据。行是一系列特定格式的数字 223---其他行值 354---其他行值 756---其他行值 754---其他行值 854---其他行值 923---其他行值 我必须验证所有的行都是以2,3,7,8,9的顺序开始的。在2和9之间可以有多条线,以2,3,7,7,8,3,7,7,8,9开头。保证2行和9行将是文件中的第一行和最后一行。在3和8之间可以出现多个7 我为这个比较提出了下面的逻辑,但是这个逻辑只适用于从2,3,7,7,8,9开始的一个行组合 当有多个行出现时,例如2,3,7,7,8,3,7,7,8,9,它不起作用。有人能帮我解决这个问题吗。如果有一个更好的选择或任何其他更好的方式为我的要求,请建议,以便我可以使用它。输入文件中的容量不高,几乎可以达到1万到2万个比较不在java中工作的文件中的值,java,string,collections,Java,String,Collections,目前我遇到了一个关于比较文本文件中的值的问题。以下是我的要求,这是一个有点独特的是我可以说 我得到一个文本文件,其中包含以下格式的数据。行是一系列特定格式的数字 223---其他行值 354---其他行值 756---其他行值 754---其他行值 854---其他行值 923---其他行值 我必须验证所有的行都是以2,3,7,8,9的顺序开始的。在2和9之间可以有多条线,以2,3,7,7,8,3,7,7,8,9开头。保证2行和9行将是文件中的第一行和最后一行。在3和8之间可以出现多个7 我为这
Set<String> recordTypeOrder = new HashSet<>();
BufferedReader rdr = new BufferedReader(new StringReader("path to my file here"));
for (String line = rdr.readLine(); line != null; line = rdr.readLine()) {
if(line.startsWith("2")){
recordTypeOrder.add("2");
}else if(line.startsWith("3")){
recordTypeOrder.add("3");
}else if(line.startsWith("7")){
recordTypeOrder.add("7");
}else if(line.startsWith("8")){
recordTypeOrder.add("8");
}else if(line.startsWith("9")){
recordTypeOrder.add("9");
}
}
Set<String> orderToCompare = new TreeSet<>(recordTypeOrder);
boolean compare = orderToCompare.equals(actualOrder());
if(!compare){
logger.info("== Processing failed =====");
throw new CustomException("======= Processing failed =======");
}
private static Set<String> actualOrder(){
Set<String> actualOrder= new HashSet<>();
actualOrder.add("2");
actualOrder.add("3");
actualOrder.add("7");
actualOrder.add("8");
actualOrder.add("9");
return actualOrder;
}
Set recordTypeOrder=newhashset();
BufferedReader rdr=new BufferedReader(new StringReader(“此处指向我的文件的路径”);
对于(字符串line=rdr.readLine();line!=null;line=rdr.readLine()){
如果(第2行开始){
recordTypeOrder.添加(“2”);
}else if(第3行开始){
recordTypeOrder.添加(“3”);
}else if(第7行开始){
recordTypeOrder.添加(“7”);
}else if(第8行开始){
recordTypeOrder.添加(“8”);
}else if(第9行开始){
recordTypeOrder.添加(“9”);
}
}
Set orderToCompare=新树集(recordTypeOrder);
布尔比较=orderToCompare.equals(actualOrder());
如果(!比较){
logger.info(“==处理失败===”);
抛出新的CustomException(“==========处理失败=====”);
}
私有静态集合控制器(){
Set actuallorder=new HashSet();
上议院添加(“2”);
上议院添加(“3”);
上议院添加(“7”);
上议院添加(“8”);
上议院添加(“9”);
返回领主;
}
非常感谢您需要存储
3,7,7,8
的顺序和计数。我认为treeset
不起作用。您可以尝试其他数据结构,如LinkedHashMap
。这样,您就可以将所需的数据存储在LinkedHashMap
中,然后编写一个自定义函数对其进行验证。为什么要使用不同类型的集合
?只需使用一种类型。TreeSet使用AbstractSet::equals方法进行调试,以确保内容实际上与正则表达式相同。您也可以查看正则表达式。@Shanu Gupta感谢您的输入。我已经采纳了你的建议,并使用LinkedHashMap实现了它,它工作得很好。