Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中读取datafile.txt中的某些句子_Java_File Io_Arraylist - Fatal编程技术网

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

在java中读取datafile.txt中的某些句子,java,file-io,arraylist,Java,File Io,Arraylist,在我的程序中,它读取一个名为datafile.txt的文件。。。在datafile.txt中是一个随机的3行字。我的程序所做的是读取用户键入的文件,然后他们可以键入一行和一个单词,它会告诉他们该位置的单词。。例如 要读取的文件是什么 datafile.txt 请输入行号和字号(第一行是1) 2.2 这个词是:The 我的问题是,我的程序将txt文档中的3行读取为0、1、2,并且单词从0开始。因此,要阅读第一行中的第一个单词,他们必须键入0,0而不是1,1。我想做的是让它工作,这样他们就可以输入1

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

要读取的文件是什么

datafile.txt

请输入行号和字号(第一行是1)

2.2

这个词是:The

我的问题是,我的程序将txt文档中的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");
    }       
} 
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类读取文件{
/**
*@param args
*@抛出异常
*@validException
*/
公共静态void main(字符串[]args)引发IOException、checkException
{
System.out.println(“输入文件名:”);
扫描仪键盘=新扫描仪(System.in);
BufferedReader inputStream=null;
ArrayList文件=新的ArrayList();
字符串文件名=keyboard.next();
System.out.println(“文件”+文件名+
“具有以下行:”;
System.out.println();
尝试
{
inputStream=new BufferedReader(新文件读取器(文件名));
ArrayList行=新的ArrayList();
while(true)
{
字符串行=inputStream.readLine();
如果(行==null)
{
打破
}
扫描仪项目化=新扫描仪(行);
while(iteminize.hasNext())
{
line.add(iteminize.next());
}
行。添加所有(行);
System.out.println(行+“\n”);
}       
System.out.println(“请输入行号和字号”);
int index1=keyboard.nextInt();
int index=keyboard.nextInt();
System.out.println(“单词是:“+lines.get(index));
}
catch(filenotfounde异常)
{
System.out.println(“打开文件时出错”+文件名);
}
inputStream.close();
}
私有静态void checkValid(ArrayList项,int索引)引发checkException
{
抛出新的checkException(“未找到”);
}       
} 

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

lines.get(index - 1)

不会完全解决你的问题。但是我想你可以从这里开始,对单词索引做一些类似的事情。

我假设你只是在学习编程,我将指出3个改进方面

  • 就像数学中的BIDMAS决定了表达式的求值顺序一样,Java和其他程序语言以微粒的方式对语句求值。这意味着在括号内 对于一个函数,可以包含一个station,而不是一个变量或常量。将使用传递到被调用函数的结果(或返回)对其进行计算。这就是为什么MvG说你可以做
    line.get(index-1)

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

  • 变量的命名应该很有用,您有
    索引
    索引1
    。有什么区别?我假设通过阅读代码,其中一个应该是用户选择的行号索引,第二个应该是所述行上单词的索引。我可以推荐
    requestedLineIndex
    requestedWordIndex


最后,这不是一个常见的StackOverflow问题,因此您的问题被“否决”了。如果您是作为课程的一部分进行学习,是否有课程论坛或虚拟学习环境(VLE),您可以在其上发布问题?在同一学习水平的同龄人的支持往往有助于探索语言的基础知识

在访问数据之前,不能从index和index1中减去1吗?Java集合的索引按惯例从0开始。但是,您只需要从用户输入的值中减去1。我会写一个答案,但请先尝试自己修复代码,并在问题中添加发生的事情和您的期望。我确实写了发生的事情和我希望它发生的事情do@MattMcCarthy:假设句子中的单词总是用空格隔开,对吗?还有,这是你家庭作业的一部分吗?如果是这样,请适当地标记它:“@如果你希望用户不能选择无效的索引,比如小于0,考虑上面的类似:<代码>行。GET((我建议在这个代码的级别上反对A)。更好地在数组访问之前移动索引检查和调整。