【问题标题】:parsing the content of a text file line by line using java使用java逐行解析文本文件的内容
【发布时间】:2014-04-17 08:29:59
【问题描述】:
3375577.3   131  STSTWMS
3375577.4   131  STSTWMS
3407108     131  STSTWMS
3407231     131  STSTWMS
3407280.1   131  STSTWMS
3407581     131  STSTWMS
3408483     131  STSTWMS
3409015     131  STSTWMS
3409015.1   131  STSTWMS
3409085.1   131  STSTWMS
3409364     131  STSTWMS
3409364.1   131  STSTWMS

我的文本文件具有上述格式。

每一行代表一个补丁的相关信息 第一列是补丁 ID,第二列是版本,第三列代表客户端。 如何逐行读取文件,将补丁存储到数组列表中并将字段解析为列

【问题讨论】:

  • 发布您尝试过的内容?

标签: java string parsing field line


【解决方案1】:

只需查找:来自 FileReader 的 BufferedReader -> readLine()

并用 String.split 分割它们

然后用 add() 添加到 ArrayList

... 真的有时候 Java 就像用简单的英语写你想做的事

【讨论】:

    【解决方案2】:

    您可以使用Scanner 类的nextLine() 方法逐行读取文本。至于如何将其存储为列,在每一行中,找到每列被分割的字符,例如:空格' ' 或任何其他,并在String 类中使用它'@987654325 @方法。

    试试这样的:

    File file = new File("input.txt");
    Scanner s = new Scanner(file);
    while (s.hasNextLine()){
    String string = s.nextLine();
    List<String> columns = Arrays.asList(string.split(" "));
    }
    

    【讨论】:

      【解决方案3】:

      上面写的带有 BufferedReader 的版本

      String line="";
      
       BufferedReader r = new BufferedReader(new FileReader(file));
      
      while((line = r.readline) != null){
      
        List<String> columns = Arrays.asList(line.split(" "));
      
      }
      

      【讨论】:

      • 通过添加以下行解决了问题: String[] columns = strLine.split("\\s{2,4}");
      【解决方案4】:

      使用 java BufferedReader 中的 readLine() 方法可以实现您的要求。 Eash 行可以存储在 ArrayList 中,然后可以拆分每个字符串以获取单个单词。

      要拆分字符串,您可以尝试使用 StringTokenizer 类。示例用法如下:

      StringTokenizer st = new StringTokenizer(str);
      while (st.hasMoreElements()) {
          System.out.println(st.nextElement());
      }
      

      此代码将删除字符串中的所有空格。

      【讨论】:

      • FileInputStream fstream = new FileInputStream("c:\\Downloads\\ibm10_20140416.list"); DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in));字符串strLine; while ((strLine = br.readLine()) != null) { System.out.println (strLine); String[] 列 = strLine.split(" ");字符串 patch_id = columns[0];字符串释放=列[1];字符串客户端=列[2];
      • 3375577.3 131 STSTTWMS 3407108 131 STSTWMS
      • 3375577.3 131 STSTWMS 3407108 131 STSTWMS 第一行的解析做得很好,但在第二行中我可以显示第 3 个字段(STSTWMS)。我认为由于拆分,第一行有 2 个空格,而第二行有 3 个空格
      • 我已经更新了我的答案。您可以尝试使用 StringTokenizer 而不是 String.split 方法
      猜你喜欢
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 2014-06-13
      相关资源
      最近更新 更多