【Java】一行代码读完记事本中的二维表

来源:互联网 发布:串口摄像头调试软件 编辑:程序博客网 时间:2024/05/16 14:30

对于如下图所示这种用记事本中的二维表:


如果要读入Java的容器中,也就是将上述的txt转化成ArrayList<ArrayList<String>>,大家可能又绞尽脑汁地思考读入类、读入方法怎么写。

隐约估计完成这样的工程大概需要十几行左右的代码吧?其实并不需要,一行代码就能做完这事。

具体如下:

import java.io.File;import java.io.FileNotFoundException;import java.util.ArrayList;import java.util.Arrays;import java.util.Scanner;public class ReadTable {public static void main(String[] args) throws FileNotFoundException{ArrayList<ArrayList<String>> T = new ArrayList<ArrayList<String>>();Scanner scanner = new Scanner(new File("d:\\1.txt"));//指定读入文件while (scanner.hasNext()) {//将txt中的二维表读入T中T.add(new ArrayList<String>(Arrays.asList(scanner.nextLine().split(" "))));}scanner.close();//必须关闭这个流,否则有警告。//打印Tfor(int i=0;i<T.size();i++){System.out.println(T.get(i));}}}
运行结果如下:


实际上上述程序,最关键就是这里:

while (scanner.hasNext()) {//将txt中的二维表读入T中T.add(new ArrayList<String>(Arrays.asList(scanner.nextLine().split(" "))));}scanner.close();//必须关闭这个流,否则有警告。
首先,scanner.hasNext()和下面的scanner.nextLine()让Java从头到尾一行行读完这个txt,就不再赘述了,之前在《【Java】输入与输出与JDK1.5之后的新型字符串StringBuilder》(点击打开链接)已经详细说明了。

然后,由于这个txt每一行的元素,都是通过空格来分隔。scanner.nextLine()读进来的每一行东西是一个String,因此可以利用String中的split方法,以空格为分隔符,形成一个字符串数组,里面的每一个元素,就是各个被空格分隔的元素。

最后,再利用Arrays中的asList的方法,配合new ArrayList<String>将这个字符串数组,转化成ArrayList<String>。由于T是一个ArrayList<ArrayList<String>>,因此利用T的add,将这个ArrayList<String>压进去则可以了。这也成功打了我之前在《【Java】Arrays中之于int数组的方法,Integer数组与int数组》(点击打开链接)提到Arrays中没有快捷将String数组转化成ArrayList<String>方法的脸。

因此,通过上述这个过程,完成一行代码读完记事本中的二维表的效果。

0 0
原创粉丝点击