0

我是Java新手,我有多年的C经验,希望你能帮助我。

我有一个十进制文件,我需要找到一个标题,然后从那里选择数据并再次查找标题。假设我的文件如下所示:

480 124 125 001 047 001 047 001 480 001 001 001 001 001 001 001 001 001 001 001 001 047 001 480 002 002 002 002 002 002 002 002

我的标题是:

001 047 001 480

标头存储在称为“标头”的 int 数组中。

我尝试了多种方法-代码:

Integer i1 = new Integer(this.header[0]);
Integer i2 = new Integer(this.header[1]);
Integer i3 = new Integer(this.header[2]);
Integer i4 = new Integer(this.header[3]);

nextDec.hasNext(i1.toString() + i2.toString() + i3.toString() + i4.toString());

返回假,但我希望是真的。即使我删除文件中标题编号的前导零,它也会返回 false(实际上我无法删除它们)

编码:

nextDec.findInLine(i1.toString() + " " + i2.toString() + " " + i3.toString() + " "
                + i4.toString());

返回null,尽管我希望它返回标题。如果我删除文件中标题编号的前导零,它会返回标题 为什么它不能与 hasNext 方法一起使用?

编码:

nextDec.findInLine(Arrays.toString(header));

没有任何输出,这是为什么呢?如何检测带有前导零的标头,检索数据并重新找到它?是否可以找到找到标头的位置(索引)?

谢谢你

我会尽量说清楚。我使用监控软件在 PC 上记录了流数据。数据以十进制格式记录到文件中,前导零(具有 3 位数字)和数字之间的空格。该文件包含多个缓冲区。数据缓冲区以 4 字节标题开始,我需要在文件中找到标题并将其后面的数据收集到要在图表中显示的适当变量中。我正在考虑根据找到标头后要读取的数据类型使用nextInt,nextFloat。

谢谢

4

1 回答 1

0

可能的解决方案是使用标题作为分隔符,然后扫描输入。但我认为最好手动而不是使用扫描仪。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        String s = "480 124 125 001 047 001 047 001 480 001 001 001 001 001 001 001 001 001 001 001 001 047 001 480 002 002 002 002 002 002 002 002\n";

        int header[] = new int[] {1, 47, 1, 480};
        String stringHeader = "";
        for (int e : header) {
            stringHeader += String.format("%03d ", e);
        }
        Scanner scanner = new Scanner(s);
        scanner.useDelimiter(stringHeader);

        // Skipping everything before first header
        scanner.skip(".*?"+stringHeader);

        // Now we get data between headers
        while(scanner.hasNext()) {
            System.out.println(   scanner.next()   );
        }

    }
}

输出(第一个和第二个标头后的两个标记):

001 001 001 001 001 001 001 001 001 001 001 
002 002 002 002 002 002 002 002

这是你想要得到的东西吗?

于 2013-10-06T15:03:12.843 回答