我正在阅读包含以下内容的文件:
127.0.0.1:8080
127.a.0.10:8081
127.0.1:8080.1
127.0.10.5:-8080
从那里我必须打印出符合以下格式的字符串。 ###。#。#。#:####此#表示任何正整数。 当我运行代码时,它打印出第一行,语句"无效"对于接下来的三个字符串,但它也标记了一个错误。
线程中的异常" main"显示java.lang.NullPointerException 在homework4.Main.main(Main.java:36)
我该如何解决这个问题?是否与inputStream = null有关? 提前谢谢。
public static void main(String[] args)
{
Scanner inputStream = null;
int count1 = -1;
int i = 0;
final String[] content = new String[200];
{
try
{
inputStream =
new Scanner (new FileInputStream ("input.txt"));
}
catch (FileNotFoundException e)
{
System.out.println("File input.txt could not be found or could not be opened");
System.exit(0);
}
}
while (inputStream.hasNext())
{
content[++count1] = inputStream.nextLine();
}
for (i=0; i <= content.length ; i++)
{
if ( content[i].matches("^\\d{3}\\.\\d{1}\\.\\d{1}\\.\\d{1}\\:\\d{4}"))
{
System.out.println(content[i]);
}
else
{
System.out.println("Not Valid");
}
}
}}
答案 0 :(得分:0)
if (content[i] != null) { //check for this
if (content[i].matches("^\\d{3}\\.\\d{1}\\.\\d{1}\\.\\d{1}\\:\\d{4}")) { ... }
else { ... }
}
答案 1 :(得分:0)
如果您的目的只是打印,那么您不需要存储并且不需要String[] content
..只需阅读该行并验证该行是否符合特定模式。
将条件移至while循环。
while (inputStream.hasNext())
{
String content = inputStream.nextLine();
// Move the condition and check with content variable.
if ( content.matches("^\\d{3}\\.\\d{1}\\.\\d{1}\\.\\d{1}\\:\\d{4}"))
{
System.out.println(content);
}
else
{
System.out.println("Not Valid");
}
}
如果您的目的是存储内容。如果你不知道前面的行的大小/数量,请使用List
来存储哪些可以根据需要动态增长。
喜欢
List<String> contents = new ArrayList<String>()
并添加有效条件的有效行。
contents.add(content);
答案 2 :(得分:0)
Path path = Paths.get("input.txt");
List<String> strings = Files.readAllLines(path, Charset.defaultCharset());
for(String string: strings) {
if (string.matches("^\\d{3}\\.\\d{1}\\.\\d{1}\\.\\d{1}:\\d{4}")) {
System.out.println(string);
} else {
System.out.println("not valid");
}
}
如果您使用java 8,则可以使用Streams API
Path path = Paths.get("input.txt");
List<String> strings = Files.readAllLines(path);
strings.stream()
.forEach(string -> {
if (string.matches("^\\d{3}\\.\\d{1}\\.\\d{1}\\.\\d{1}\\:\\d{4}")) {
System.out.println(string);
} else {
System.out.println("not valid");
}
});
注意:你的正则表达式包含冗余转义
使用
^\\d{3}\\.\\d{1}\\.\\d{1}\\.\\d{1}:\\d{4}
而不是
^\\d{3}\\.\\d{1}\\.\\d{1}\\.\\d{1}\\:\\d{4}
答案 3 :(得分:-1)
在你的for循环中,你从0变为长度。最后一个索引是(长度 - 1)
另一个问题是如果您的文件超过200行