验证文件

时间:2015-11-13 12:01:33

标签: java

我获得了从Java读取.txt文件的作业。该文件包含以下内容:

  

ID:SampleID

     

作业:管理器

     

姓名:Samuel Rahul

读取成功,我能够打印文件内容。我使用Scanner读取文件:

FileReader _reader = new FileReader(_name);
            BufferedReader _br = new BufferedReader(_reader);


            while((line = _br.readLine()) != null) {

                System.out.println(line);
            }

问题是,我需要验证,例如,ID不是空的,例如,

  

ID:

如果ID为空,则会显示错误。我应该使用' delimiter'为了这项任务。

编辑:

Scanner s = new Scanner(line).useDelimiter("ID:\\s*");

                System.out.println(s.next())

我使用过.useDelimiter,但问题是,它显示了文本的其余部分,例如Job和Name,这可能被误导为" ID",然后ID的值总是不是空的。

我想要"之后的确切字符串:"(我得到的,除了它之后还包括整个字符串,包括Job:Manager和Name:Samuel Rahul)在ID旁边。这让我感到困惑,因此我可以验证ID String是否为null。

如果我能在" ID之后得到确切的字符串:"并排除他们的下一行,然后我可以验证该值。我认为我的正则表达式是错误的,但我找不到。

2 个答案:

答案 0 :(得分:0)

您可以在代码下面执行此操作:

ChefSpec::ServerRunner

答案 1 :(得分:0)

由于这是一项任务,我不会给出解决方案,而是尝试教你自己需要学习什么才能自己解决问题。

问题:

  1. 您需要能够阅读文件并提取其内容。
    • 你已经实现了这一点;虽然,根据您的示例,Scanner可能有点矫枉过正。
  2. 您需要将属性(标识符)与其分开。
    • 这通常称为 解析 ;所以你需要解析文件/内容。
    • 在示例中将属性与值分开的模式是明确定义的并且非常简单:在任何给定的line中,之前的内容 :字符为{{1 property字符后的内容:
  3. 从您的作业开始,您需要检查被value property ID是否有value,或者换句话说,value是{&n} { #39; t empty
  4. 如何解决:

    1. 对于您的作业,更合适的解决方案可能是在BufferedReader.readLine()循环中使用while(BufferedReader.ready())方法。
      1. 解决解析的方法有很多种:
      2. 解决方案1 ​​

          带有String.indexOf(char)字符的
        • ':' 或者......
        • 带有String.indexOf(String)字符串的
        • ":" 结合......
        • String.substring(int begin, int end)

        解决方案2

        • String.split(String pattern)采用":"模式,其中result[0]propertyresult[1]value

        解决方案3

        • 使用Pattern& Matcher结构;在这种情况下,您使用的Scanner已经内置Pattern,可以重复使用;但这可能比你的任务意图稍微提前一点。

        其他解决方案

        • 许多其他解决方案都是可能的。
        1. 在您从属性标识符解析之后,知道该值是否为空(或者在其他类似情况下为null)非常简单:

          • String.isEmpty()或更宽容仅包含空格字符的字符串,String.trim().isEmpty()