【问题标题】:Read specific portion of file text, and then add them in array读取文件文本的特定部分,然后将它们添加到数组中
【发布时间】:2016-03-01 22:03:54
【问题描述】:

我有一个名为 messages.txt 的文件文本如下:

6107586533  44335557075557777
4848675309  53366 6699044404666804448
6107584096  94466602777330999666887770223377778077778 883 336687777

第一列代表收件人的数字,第二列代表数字编码的消息(我将使用解码器方法来解码我已经创建的第二列数字)。我使用以下方法读取文件文字:

public void readMessagesFromFile() throws Exception{
 BufferedReader in = new BufferedReader(new FileReader("messages.txt"));
 String str;

 List<String> list = new ArrayList<String>();
 while((str = in.readLine()) != null){
     list.add(str);
 }

 String[] stringArr = list.toArray(new String[3]);
 for (String x: stringArr) {
     System.out.print(x);
}
}

但是,它存储所有内容(应该如此),如下所示:

6107586533  443355570755577774848675309 53366 66990444046668044486107584096 94466602777330999666887770223377778077778 883 336687777

我怎样才能只读取和存储以下部分:

    44335557075557777
    53366 6699044404666804448
    94466602777330999666887770223377778077778 883 336687777

我想按行读取和存储,即第二列的每一行都会分配给数组的每个索引),只是想在存储第二列时排除第一列。

【问题讨论】:

  • 你看过String#split()吗?另外,“第二列”真的是指“除了第一个空格分隔的标记之外的所有内容”
  • 首先,有些行包含超过 2 列(假设单个或多个空格被视为分隔符)。之后,您阅读这些行而不将它们分成几部分
  • 我已经在我的解码器方法中应用了拆分方法,它将逐个解码每个数字。但是我需要先阅读第二列,然后再应用解码器方法。
  • java.util.Scanner 可能比BufferedReader 更容易使用

标签: java arrays file


【解决方案1】:

这将分割线并保留第一个标记之后的所有内容

 List<String> list = new ArrayList<String>();
 while((str = in.readLine()) != null){
     String[] temp = str.trim().split("\\s+",2);
     list.add(temp[1]);
 }

调用trim 以防有前导空格。

至于您的代码转换为数组,您不需要它,您可以遍历列表。

 for (String s : list)
 {
     System.out.println(s);
 }

【讨论】:

  • 它给出了这个:4433555707555777753366 669904440466680444894466602777330999666887770223377778077778 883 336687777,它存储第二列没有具体的模式我提到。
猜你喜欢
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多