2014-01-16 132 views
0

我需要能够读取文件的每一行多个参数,因此for循环。在第一次之后,它似乎不再读它们,似乎跳过了试验声明。有任何想法吗?我敢肯定,我错过了一些愚蠢的东西,但一直在玩它,不幸的是时间不在我身边。ReadLine - 执行两次?

for (int j = 0; j < ags.length; j++){ 

try{ 
String nameFromFile = null; 
BufferedReader InputReader = new BufferedReader(new InputStreamReader(System.in)); 
while ((nameFromFile = InputReader.readLine()) != null) { 

    // Do stuff 

} catch (IOException e) { 
    System.out.println(e.getMessage()); 
    } 
} 
+1

你有什么异常? –

+0

在循环之前打印'ags.length'。 – Maroun

+1

ags的长度是多少? –

回答

1

你似乎有两个要比较System.inargs来源,我建议你单独阅读,然后对它们进行比较。

Set<String> fromInt = new HashSet<>(); 
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { 
    for(String line; (line = br.readLine()) != null;) 
     fromIn.add(normalise(line)); 
} 
// compare argsList with fromIn. 

例如,

for(String arg: args) { 
    if (fromIn.contains(normalise(arg))) { 
     // something 
    } else { 
     // something else 
    } 
} 
+0

列表是否可以拆分以单独查看每场比赛? –

+0

@NatalieCarr是的,很可能你不需要。你想如何比较它们?例如你想要工会吗,这个词在一个而不是另一个。 –

+0

我可以进行比赛之前改变了某些东西。例如一些字母具有等价性,所以我查看两个字符串并对它们进行规范化,并检查它们是否匹配,然后转到下一个名称。 –

1

我需要能够读取该文件

什么文件的每一行?你从System.in:

BufferedReader InputReader = new BufferedReader(new InputStreamReader(System.in)); 

你读码这行,直到你在控制台上输入的东西会阻止。

+0

我正在读取文件,如下所示:'Program Name1 Name1

+0

然后你应该这么说在你的问题中,而不是浪费我的时间。你还需要向我们倾诉你为什么要读'ags.length'这个文件。 – EJP

+0

我认为这是我的问题,我应该只读一次并使用数据'ags.length'次。现在试着解决这个问题,谢谢 –

0

您不读取文件,包括System.in流。

每个数据流都有一个内部指针,所以数据流发出,最后读取的是哪一行。

如果系统流被读取一次,指针指向流的结尾。 只要流未被重置,read命令将不会返回任何内容。

尝试

InputStream.reset()

,甚至更好,只读取流一次,并缓存结果!这更快更安全,因为Stream输入可以在迭代过程中更改。

+0

虽然reset()在文件上工作,但它不会期望它在控制台输入上工作。 ;) –

+0

当然,这取决于流,但这也在javadoc中描述。反正这个流应该被读取一次。 –

0

您的代码永远不会从while循环中退出。

while ((nameFromFile = InputReader.readLine()) != null) 

在上面的循环中,它只会打印一次,并且在文件末尾它将不会出于while循环。这就是为什么你只能获得一次输出。由于它不是从while循环退出,所以不会返回for循环。 readLine()返回字符串,它由“\ n”或“\ r \ n”结尾。如下改变,你就能理解为ags.length

while ((nameFromFile = InputReader.readLine())=="\n") 
+0

嗨,谢谢,不幸的是,这并没有工作,没有错误,只是没有得到任何价值,即使是第一个循环。 ((nameFromFile = InputReader.readLine())==“\ r \ n”) –

+0

具有相同的输出和两个更改。 –