java txt项目的最佳解决方案

时间:2015-03-10 16:12:39

标签: java file java.util.scanner

像主题一样,我正在寻找最佳方式:

我有.txt文件。在这个文件中有例如:

Matthew Sawicki 25\n
Wladimir Putingo 28\n
Barracko Obamaso 27

编写打开此文件的程序的最佳方法是什么,检查出最大的数字,然后打印出来?

我在考虑:打开文件 - >使用hasNextLine方法检查每一行,保存最大数字(addin i用于测量行 - 1,2,3)然后关闭文件并再次打开然后以某种方式打印出该行

好的,那就是编辑。 顺便说一句,我必须在控制台中写入文件名来打开它。我必须使用Scanner。 我的代码:

Scanner scanner= new Scanner (System.in);
File file = new File (scanner.nextLine);
scanner = new Scanner (file);
int temp=O;
int i=0;
while (scanner.hasNextLine) {
String word1=scanner.next;
String word2=scanner.next;
String word3=scanner.next;
If(word3>temp)
temp3=word;   
i++;  // now i get the i id of the line with the biggest number

现在我正在考虑重新打开文件并再次循环以打印出具有最大数字的那一行(例如if(newWord3==temp)) 这是个好主意吗?以及如何重新打开文件?任何人都可以继续代码吗?

3 个答案:

答案 0 :(得分:0)

假设此文件将始终采用相同的格式,这里的代码片段可以通过 no checking 执行您想要的操作,以确保任何内容都位于错误的位置/格式。

    //Create a new scanner pointed at the file in question
    Scanner scanner= new Scanner(new File ("C:\\Path\\To\\something.txt"));

    //Create a placeholder for the currently known biggest integer
    int biggest = 0;

    while (scanner.hasNextLine()) {
        String s = scanner.nextLine();

        //This line assumes that the third word separated by spaces is an 
        //    integer and copies it to the `cndt` variable
        int cndt = Integer.parseInt(s.split(" ")[2]);

        //If cndt is bigger than the biggest recorded integer so far then
        //    copy that as the new biggest integer
        biggest = cndt > biggest ? cndt : biggest;
    }

    //Voila
    System.out.println("Biggest: " + biggest);

您需要验证相关号码是否存在,以及您是否可以处理文本文件中的某行格式错误的情况

答案 1 :(得分:0)

有几种方法可以做你想要的。您描述的方式可以工作,但正如您所说,它需要扫描文件两次(在最坏的情况下,这是您必须打印的行是最后一行)。

避免再次重新打开文件的更好方法是修改算法以不仅保存最大数字和相应的行号,而且如果数字大于先前保存的数字,则保存整行。然后,当您完成扫描文件后,您只需打印您保存的字符串,即包含最大数字的字符串。

请注意,您的代码无法使用:if是将Stringint进行比较,还有temp3变量(可能是{}}只是一个错字)。

要遵循我的建议你应该有这样的事情:

int rowNumber = Integer.parseInt(word3);
if(rowNumber > temp) {
    temp = rowNumber;
    tempRow = word1 + " " + word2 + " " + word3;
}

然后你可以打印出tempRow(你应该在while循环之外定义)。

答案 2 :(得分:0)

现在一切都很好。我在我的文件中犯了一个简单的错误(最后一个空的输入),所以我无法弄清楚如何做到这一点。 谢谢你的努力和gl!。