我获得了从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之后得到确切的字符串:"并排除他们的下一行,然后我可以验证该值。我认为我的正则表达式是错误的,但我找不到。
答案 0 :(得分:0)
您可以在代码下面执行此操作:
ChefSpec::ServerRunner
答案 1 :(得分:0)
由于这是一项任务,我不会给出解决方案,而是尝试教你自己需要学习什么才能自己解决问题。
Scanner
可能有点矫枉过正。line
中,之前的内容 :
字符为{{1 property
字符后的内容为:
。value
property
ID
是否有value
,或者换句话说,value
是{&n} { #39; t empty
。BufferedReader.readLine()
循环中使用while(BufferedReader.ready())
方法。解决方案1
String.indexOf(char)
字符的':'
或者...... String.indexOf(String)
字符串的":"
结合...... String.substring(int begin, int end)
解决方案2
String.split(String pattern)
采用":"
模式,其中result[0]
为property
,result[1]
为value
。解决方案3
Pattern
& Matcher
结构;在这种情况下,您使用的Scanner
已经内置Pattern
,可以重复使用;但这可能比你的任务意图稍微提前一点。其他解决方案
在您从属性标识符解析之后,知道该值是否为空(或者在其他类似情况下为null
)非常简单:
String.isEmpty()
或更宽容仅包含空格字符的字符串,String.trim().isEmpty()