当前位置: 首页 > 面试题库 >

读取由制表符分隔的文件,并将单词放入ArrayList中

莘聪
2023-03-14
问题内容

我正在做一个自学练习,以帮助我更多地了解Java,但是我一直陷在这个问题上。我有以下txt文件:

Name  Hobby 
Susy  eat fish 
Anna  gardening
Billy bowling with friends

注意: 名称和爱好由制表符分隔

读取所有行并将其放入arraylist(name,hobby)的最佳方法是什么。棘手的部分是

eat fish or bowling with friends

有空格,必须将其放在一个数组下,显然我无法对其进行硬编码。这是我当前的代码:

 public void openFile(){
            try{
                FileInputStream fstream = new    FileInputStream("textfile.txt");
          // use DataInputStream to read binary NOT text
          BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
          ArrayList<String> names = new ArrayList<String>();
          ArrayList<String> hobbies = new ArrayList<String>();
          String lineJustFetched;
          while ((lineJustFetched = br.readLine()) != null)   {
          String[] tokens = lineJustFetched.split(" \t");

我收到一个错误:

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1

我怀疑计算索引在选项卡上不是很有用。任何想法?


问题答案:

好了,您需要执行以下所示的食谱:

  1. 创建一个 BufferedReader
  2. 创建一个 ArrayList<String>
  3. 开始将数据读取到String名为的变量lineJustFetched
  4. String通过调用拆分lineJustFetched.split("\t");
  5. 遍历所String[]产生的。检查您要输入的令牌是否ArrayList不是""
  6. 如果不是,请将单词添加ArrayList

您指定需要根据\t值进行拆分,因此空格不会成为问题。

社会科学中心

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;

public class WordsInArray {
    public static void main(String[] args) {
        try{
            BufferedReader buf = new BufferedReader(new FileReader("/home/little/Downloads/test"));
            ArrayList<String> words = new ArrayList<>();
            String lineJustFetched = null;
            String[] wordsArray;

            while(true){
                lineJustFetched = buf.readLine();
                if(lineJustFetched == null){  
                    break; 
                }else{
                    wordsArray = lineJustFetched.split("\t");
                    for(String each : wordsArray){
                        if(!"".equals(each)){
                            words.add(each);
                        }
                    }
                }
            }

            for(String each : words){
                System.out.println(each);
            }

            buf.close();

        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

输出量

John
likes to play tennis
Sherlock
likes to solve crime


 类似资料:
  • 我在使用Pandas读取选项卡分隔的文件时遇到问题。 所有单元格值都有双引号,但对于某些行,有一个额外的双引号打断了整个过程。例如: 我得到的错误是:错误标记数据。C错误:第8355行预期有31个字段,SAW58 我使用的代码是: 它适用于其余文件,但不适用于出现额外双引号的文件。

  • 目前,我正在逐行读取由制表符分隔的文件,将每行中的项目拆分,并通过硬编码值50查找由50个项目组成的制表符分隔的行,然后创建数据表。 问题:以制表符分隔的源文件在拆分后有时有50或53项以制表符分隔的行。需要直接读取以制表符分隔的源文件中具有最大制表符分隔符的行,然后继续我的逻辑。 我的C代码

  • 我想验证由一些分隔符分隔的单词输入。本例中的分隔符是“|”符号,前后用空格分隔 到目前为止,我只听到了第一个单词,下面是rejex: 如何用空格和分隔符分隔单词或数字?PS仍在学习教程。任何帮助都将不胜感激 为了进一步澄清,我正在为上面的dojo dijit小部件寻找正则表达式,以正确验证输入。

  • null > 构造函数,它接受两个输入:(String,String)。这两个输入以正确的顺序表示lastname和firstname。构造函数只需将参数中的数据分配给实例变量。 名为toString()的公共实例方法,它返回一个字符串数据(学生的姓名),格式为“lastname,firstname”。 类MainApp null

  • 问题内容: 我有一个txt文件,格式为: 我想将所有键及其值放入创建的hashMap中。如何获得或知道何时在冒号(:)处拆分键和值?:-) 我试过了: 问题答案: 使用逐行读取文件,并针对该行中第一次出现的行执行一次(如果没有,则忽略该行)。 这是一些示例代码-避免使用Scanner(它有一些微妙的行为,恕我直言,实际上比其价值更大的麻烦)。

  • 我读过其他一些类似于此的问题,但都使用了imports和extras,除了importjava.io.*之外,我不想使用任何imports;也没有任何名单。另外,这个is方法中的for循环是我在搞乱它,因为我无法弄清楚它。 }public static void main(string[]args)抛出IOException,FileNotFoundException{int[]array=pro