【问题标题】:How to read a column from a text file in java using scanner?java - 如何使用扫描仪从java中的文本文件中读取一列?
【发布时间】:2021-05-05 02:11:04
【问题描述】:

我想从名为 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

【问题讨论】:

  • private static String records = ... 是文件的内容吗?如果是这样,您应该首先使用: 而不是逗号, 来分割以获取您的行,然后用逗号分割每行并获取每个数组中的第一项。
  • 另外,由于这是一个 .txt 文件,private static String records = 不是必需的," ... "+ 引号也不是必需的,这会给您正在做的工作带来混乱。
  • 是的,就是我要提取第一列的文件内容
  • Henry Tang 我无法编辑文本文件
  • 只是为了确认......文件真的包含一行吗?没有任何换行符?因为这就是records 字符串所说的。 (实际上,我们确切地知道输入文件的样子是相当重要的。因为这决定了它应该如何被读取。)

标签: java io java.util.scanner


【解决方案1】:

您在使用分隔符时走在了正确的轨道上。 这是我的做法,可以稍微清理一下,你必须创建一个 for 循环来遍历 arraylist 并获取每个,然后拆分每个并打印每个索引的第 0 个索引(“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] );
      }

【讨论】:

  • 我试过你的答案,但它不适合我
  • 我现在附加了 for 循环。你不能这样做 s2[i] 因为 s2 数组只有 5 长。它必须是静态 0(第一列)
  • @SamuelMideksa - 请更具体。
  • @MattDog_222Overwatch 现在它可以工作了,但我仍然得到这个字符 " 以及输出中的 "+ 字符
  • 我会仔细检查您是否没有在其中的某个地方运行任何额外的代码,因为我没有添加任何额外的字符。任何地方都不应该有文字“+”,因为字符串不包含任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
相关资源
最近更新 更多