从java中的datafile.txt中读取某些句子

时间:2012-09-08 20:44:20

标签: java file-io arraylist

在我的程序中,它读取一个名为datafile.txt的文件......在datafile.txt中是一个随机的3行单词。我的程序所做的是读取用户键入的文件,然后他们可以键入Line#和Word#,它会告诉他们该位置的单词...例如..

要读取的文件是什么?

datafile.txt

请输入行号和单词编号(第一行为1)。

2 2

这个词是:

我的问题是我的程序将txt doc中的3行读为0,1,2,单词从0开始。所以要读取第一行中的第一个单词,他们必须输入0,0而不是1,1。我想要做的是让它工作,这样他们可以输入1,1而不是0,0。不知道我现在的问题是什么,这是我的代码......

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class readingFile {

    /**
    * @param args
    * @throws IOException 
    * @throws validException 
    */
    public static void main(String[] args) throws IOException, checkException 
    {
        System.out.println("Enter file name: " );
        Scanner keyboard = new Scanner(System.in);
        BufferedReader inputStream = null;
        ArrayList<String> file = new ArrayList<String>();
        String fileName = keyboard.next();
        System.out.println ("The file " + fileName +
                " has the following lines below: ");
        System.out.println();

        try
        {
            inputStream = new BufferedReader(new FileReader(fileName));         
            ArrayList<String> lines = new ArrayList<String>();
            while(true)
            {
                String line = inputStream.readLine();
                if(line ==null)
                {
                    break;
                }

                Scanner itemnize = new Scanner(line);
                while(itemnize.hasNext())
                {
                    lines.add(itemnize.next());
                }
                lines.addAll(lines);

                System.out.println(lines+"\n");                 
            }       

            System.out.println("Please enter the line number and word number");

            int index1 = keyboard.nextInt();
            int index = keyboard.nextInt();

            System.out.println("The word is: "+ lines.get(index));
        }
        catch(FileNotFoundException e)
        {
            System.out.println("Error opening the file " + fileName);
        }
        inputStream.close();
    }

    private static void checkValid(ArrayList<String> items, int index) throws checkException
    {
        throw new checkException("Not Found");
    }       
} 

2 个答案:

答案 0 :(得分:1)

将基于1的用户输入调整为基于0的内部表示的明显解决方案是在某个时刻减去1。看到你甚至没有使用index1,写作

lines.get(index - 1)

不会完全解决您的问题。但我想你可以从那里拿出它,并为索引这个词做类似的事情。

答案 1 :(得分:0)

我认为你只是在学习编程,我将指出3个改进领域

  • 很像数学如何使用BIDMAS来确定表达式的评估顺序Java和其他程序语言以微粒方式评估语句。这意味着在函数的括号内,您可以包含一个语句而不是变量或常量。这将在结果(或返回)传递到被调用函数的情况下进行评估。这就是为什么MvG说你可以做lines.get(index - 1)

  • 并非您应该考虑和计划的所有异常都将由编译器通知您。例如,在您的代码中输入了行号或字号的无效输入,您将获得运行时异常(数组索引超出范围)

  • 变量的命名应该很有用,您有indexindex1。有什么不同?我假设从读取代码时,应该是用户选择的行号索引,第二个应该是所述行上的单词的索引。我可以建议requestedLineIndexrequestedWordIndex

最后一点,这不是一个常见的StackOverflow问题,因此为什么你的问题被“拒绝”了。如果您正在学习课程的一部分,那么您可以在课程论坛或虚拟学习环境(VLE)上发布问题吗?在相同的学习水平上,您的同伴的支持往往有助于探索语言的基础知识。