我是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
标题存储在名为“header”的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,但我希望是真的。 即使我删除了文件中标题号的前导零(即实际上我无法删除它们),它也会返回false。
代码:
nextDec.findInLine(i1.toString() + " " + i2.toString() + " " + i3.toString() + " "
+ i4.toString());
返回null,但我希望它返回标题。 如果我删除文件中标题号的前导零,为什么它不能用于hasNext方法,它会返回标题?
代码:
nextDec.findInLine(Arrays.toString(header));
没有任何输出,为什么? 如何检测标头,使用前导零,检索数据并重新找到它?是否可以找到找到标题的位置(索引)?
谢谢
我会尽力让自己更清楚。我使用监控软件在PC上记录流数据。数据以十进制形式记录到文件中,前导零(有3位数字)和数字之间的空格。该文件包含多个缓冲区。 数据缓冲区以4字节标头开头,我需要在文件中找到标头并将其后面的数据收集到适当的变量中以显示在图形中。我想在找到标题后根据我想要读取的数据类型使用nextInt,nextFloat。
谢谢
答案 0 :(得分: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
这是你想要的吗?