如何使用扫描仪从 java 中的文本文件中读取列?

How to read a column from a text file in java using scanner?

提问人:Samuel Mideksa 提问时间:5/5/2021 最后编辑:Samuel Mideksa 更新时间:5/5/2021 访问量:942

问:

我有这个文本,我想从我的名为 Data.txt 的项目中阅读第一列。

//column names:   productId, name,numInStock,provider,pricePerUnit

private static String records =     "231A,Light Bulb,123,Wilco,1.75:"+
                                "113D,Hairbrush,19,Aamco,3.75:"+
                                "521W,Shampoo,24,Acme,6.95:"+
                                "440Q,Dishwashing Detergent,20,Wilco,1.75:"+
                                "009G,Toothbrush,77,Wilco,0.85:"+
                                "336C,Comb,34,Wilco,0.99:"+
                                "523E,Paper Pad Set,109,Congdon and Chrome,2.45:"+
                                "888A,Fake Diamond Ring,111,Americus Diamond,3.95:"+
                                "176A,Romance Nove1 1,20,Barnes and Noble,3.50:"+
                                "176B,Romance Nove1 2,20,Barnes and Noble,3.50:"+
                                "176C,Romance Nove1 3,20,Barnes and Noble,3.50:"+
                                "500D,Floss,44,Wilco,1.25:"+
                                "135B,Ant Farm,5,Wilco,8.00:"+
                                "211Q,Bicycle,9,Schwinn,75.95:"+
                                "932V,Pen Set,50,Congdon and Chrome,9.95:"+
                                "678Q,Pencil 50,123,Congdon and Chrome,9.95:"+
                                "239A,Colored Pencils,25,Congdon and Chrome,4.75:"+
                                "975B,Shower Curtain,25,Wilco,6.50:"+
                                "870K,Dog Bowl,15,Wilco,4.75:"+
                                "231S,Cat Bowl,15,Wilco,4.75:"+
                                "562M,Kitty Litter,15,Wilco,3.25:"+
                                "777X,Dog Bone,15,Wilco,4.15:"+
                                "933W,Cat Toy,15,Wilco,2.35:"+
                                "215A,Hair Ball,0,Little Jimmy,0.00:";

我写了这段代码来这样做,但我没有得到所需的输出。 我的代码是

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
        Scanner input = new Scanner(System.in);

        File file = new File("C:\\Users\\student\\Desktop\\workspace\\Welcome\\src\\Data.txt");
        input = new Scanner(file);

        while (input.hasNextLine()) {
            String line = input.nextLine();
            String[] words = line.split(",");
            System.out.println(words[0]);
            input.useDelimiter(",");
        }
        input.close();

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

我想以这种格式获取输出

               134A
               213A
               911C
               012E
               662Z

这是我得到的输出,我想删除说私有静态字符串记录 = 的部分,以及“.

//column names:   productId

private static String records =     "231A
                                "113D
                                "521W
                                "440Q
                                "009G
                                "336C
                                "231S
java io java.util.scanner

评论

1赞 Frederic Perron 5/5/2021
private static String records = ...文件的内容是吗?如果是这样,您应该先用逗号而不是逗号拆分以获取行,然后用逗号拆分每行并获取每个数组中的第一项。:,
0赞 Tangy 5/5/2021
此外,由于这是一个.txt文件,因此不需要引号,引号也不是必需的,这可能会给您正在做的工作增加混乱。private static String records =" ... "+
0赞 Samuel Mideksa 5/5/2021
是的,这是文件的内容,我想提取第一列
0赞 Samuel Mideksa 5/5/2021
Henry Tang 我无法编辑文本文件
0赞 Stephen C 5/5/2021
只是为了确认......文件真的由一行组成吗?没有任何换行符?因为字符串就是这么说的。(实际上,我们确切地知道输入文件是什么样子的非常重要。因为这决定了应该如何阅读它。records

答:

1赞 MattDog_222 Overwatch 5/5/2021 #1

你和熟食仪走在正确的轨道上。 这是我是如何做到的,它可以清理一下,你必须做一个for循环来遍历数组列表并获取每一个,并拆分每一个并打印每个的0'th index(“str”是你提供的字符串/文本文件)

          Scanner in = new Scanner(str) ;
      in.useDelimiter(":") ;
      ArrayList<String> al = new ArrayList<>() ;
      while( in.hasNext())
      {
          al.add(in.next() ) ;
      }
      
      for( int i = 0 ; i < al.size(); ++i )
      {
          String s = al.get(i) ;
          String[] s2 = s.split(",") ;
          System.out.println( s2[0] );
      }

评论

0赞 Samuel Mideksa 5/5/2021
我试过你的答案,但它对我不起作用
0赞 MattDog_222 Overwatch 5/5/2021
我现在附加了 for 循环。你不能这样做,因为 s2 数组只有 5 个长度。它必须是静态 0(第一列)s2[i]
0赞 Stephen C 5/5/2021
@SamuelMideksa - 请更具体。
0赞 Samuel Mideksa 5/5/2021
@MattDog_222Overwatch 现在它可以工作了,但我仍然得到这个字符“以及输出中的”+ 字符”
0赞 MattDog_222 Overwatch 5/5/2021
我会仔细检查您是否在某处运行任何额外的代码,因为我没有添加任何额外的字符。任何地方都不应该有文字“+”,因为字符串不包含任何文字。