【问题标题】:Comparison of values from file not working in java比较文件中的值在java中不起作用
【发布时间】:2018-04-20 06:48:38
【问题描述】:

目前我遇到了一个关于比较文本文件中的值的问题。以下是我的要求,我能说的有点独特。

我得到一个包含以下格式数据的文本文件。这些行是一系列特定格式的数字。

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 这样的行时,它不起作用。有人可以帮我解决这里的问题以及我如何解决这个问题。如果有更好的选择或任何其他更好的方式满足我的要求,请提出建议,以便我可以使用它。输入文件的体积不高,差不多10到2万。

 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;
  }

非常感谢

【问题讨论】:

  • 你为什么使用不同类型的Sets?只使用一种类型。 TreeSet 使用 AbstractSet::equals 方法
  • 还要调试保证内容其实是一样的
  • 你也可以看看正则表达式。
  • @Shanu Gupta 感谢您的意见。我已经采纳了您的建议并使用 LinkedHashMap 实现了它的工作正常。

标签: java string collections


【解决方案1】:

您需要存储3,7,7,8 的订单和数量。我认为treeset 行不通。你能试试LinkedHashMap之类的其他数据结构吗?这样您就可以将所需的数据存储在 LinkedHashMap 中,然后编写一个自定义函数来验证它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多