0

我已将文件读入数组,但想知道如何解析该数组中的某些值。

我的代码:

        ...
        try{
             ...
             String strLine;
             String delims= "[ ]+";
             //parsing it
             ArrayList parsedit = new ArrayList();
             while((strLine=br.readLine())!=null){
                 System.out.println("Being read:");
                 System.out.println(strLine);
                 parsedit.add(strLine.split(delims));
             }
             System.out.println("Length:" + parsedit.size());
             in.close();   
             ...

我正在阅读的文件是这样的:

a b c d e f g
1 2 3 4 5 6 7
1 4 5 6 3 5 7
1 4 6 7 3 2 5

这使得输出如下:

How many files will be input? 1
Hey, please write the full path of the input file number1! 
/home/User/Da/HA/file.doc
Being read:
a b c d e f g 
Being read:
1 2 3 4 5 6 7 
...
Length:4

我想解析出这些数据,只剩下第一个和第五个值,这样它就会变成这样:

a e
1 5

有没有人有关于如何去做的建议?编辑:根据一些建议,我将代码更改为:

public static void main(String[] args) {
        System.out.print("How many files will be input? ");
        Scanner readIn=new Scanner(System.in);
        int input=readIn.nextInt();
        int i=1;
        while(i<=input){
            System.out.println("Hey, please write the full path of the input file number" + i + "! ");
            Scanner fIn=new Scanner(System.in);
            String fileinput=fIn.nextLine();
          try{
             FileInputStream fstream=new FileInputStream(fileinput);
             DataInputStream in=new DataInputStream(fstream);
             BufferedReader br=new BufferedReader(new InputStreamReader(in));
             String strLine;
             String delims= "[ ]+";
             ArrayList parsedit = new ArrayList();
             while((strLine=br.readLine())!=null){
                 System.out.println("Being read:");
                 System.out.println(strLine);
                 parsedit.add(strLine.split(delims));
             }
             String[] splits=strLine.split(delims);
             System.out.println("Length:" + splits.length);
             in.close();   
        }
        catch(Exception e){
            System.err.println("Error: " + e.getMessage());
        }
        i++;
    }
  }
}

这不会返回任何错误,但它似乎并没有完全一样。我错过了什么愚蠢的东西吗?输出是这样的:

How many files will be input? 1
Hey, please write the full path of the input file number1! 
/home/User/Da/HA/file.doc
Being read:
a b c d e f g 
Being read:
1 2 3 4 5 6 7 
...

但是尽管我有一条线告诉我数组长度,但它从未被打印出来,这告诉我我最终打破的比我修复的要多。你知道我可能会错过/忘记什么吗?

4

3 回答 3

1

split()函数返回一个字符串数组,表示从原始字符串获得的标记。

所以,你想要的是只保留第一个和第 5 个令牌(splits[0] & splits[4]):

  String[] splits = strLine.split(delims); 
  //use the splits[0] & splits[4] to create the Strings you want

关于您的更新,请替换:

 while((strLine=br.readLine())!=null){
             System.out.println("Being read:");
             System.out.println(strLine);
             parsedit.add(strLine.split(delims));
 }

有了这个:

 while((strLine=br.readLine())!=null){
             System.out.println("Being read:");
             String splits[] = strLine.split(delims);
             System.out.println(splits[0]+" "+splits[4]);
             parsedit.add(splits);
 }
于 2012-08-23T14:51:47.643 回答
0

你可以试试这个

String[] line = s.split("\\s+");

这样,您的所有元素都将按顺序存储在数组中line。这将允许您访问您想要的任何元素。

于 2012-08-23T14:51:37.610 回答
0

您只需要从返回的 中获取第一个和第五个String[]strLine.split(delims)

(我假设您知道您在当前代码中正在做什么。您假设每一行将包含相同数量的“列”,由至少 1 个空格字符分隔。无论如何,这是一个公平的假设。)

于 2012-08-23T14:52:36.560 回答