一尘不染

如何使用扫描仪(java)处理它?

java

请问我关于扫描仪的问题;我在一家小公司工作;我们有一个软件;它生成一个大文本文件;而且我们必须从中得到一些有用的信息;
我想用Java编写一个简单的应用程序以节省时间;你能指导我吗?

例如我要这个输出;

输出量


RFID:25蓝色:562 WifiID:2610 RFID:33

RFID数量:2

例如;这是我的文本文件,因为使用我们的软件生成的每个文件都有14000行:)

--------------------------
AAAAAAAAAAAA;RFID=25;
BBBB;BBBBBBBB;BBBBBBBBBB;
CCCCC;fffdsfdsfdfsd;BLUID=562;dfsdfsf;
fgfdgdf;terter;fdgfdgtryt;
trtretrre;WifiID=2610;trterytuytutyu;
zxzxzxzxz;popopopwwepp;RFID:33;aasasds…
gfdgfgfd;gfdgfdgfd;fdgfgfgfd;

我用此源代码对其进行了测试,但是我无法处理它。

Scanner scanner = new Scanner("i:\1.txt");

scanner.findInLine("RFID=");

if (scanner.hasNext())
System.out.println(scanner.next());
else
System.out.println("Error!");

请帮我 ;

非常感谢 …


阅读 600

收藏
2020-09-08

共1个答案

一尘不染

好吧,您建议的来源不会做您想要的。扫描仪使用定界符分隔输入。默认的分隔符是空格(空格,制表符或换行符)。Scanner.hasNext()只是告诉您是否存在新的空白脱机令牌。Scanner.next()仅返回该令牌。请注意,这些都不受Scanner.findInLine(pattern)的影响,因为它所做的只是在当前行中搜索提供的模式。

也许是这样的(我还没有测试过):

Scanner scanner = new Scanner("i:\\1.txt");
scanner.useDelimiter(";");
Pattern words = Pattern.compile("(RFID=|BLUID=|WifiID=)");//just separate patterns with |
while (scanner.hasNextLine()) {
  key = scanner.findInLine(words);
  while (key != null) {
    String value = scanner.next();
    if (key.equals("RFID=") {
      System.out.print("RFID:" + value);
    } //continue with else ifs for other keys
    key = scanner.findInLine(words);
  }
  scanner.nextLine();
}

我建议您不要使用扫描仪,而只使用BufferedReader和几个Pattern对象,因为该方法对于您想做的事情更加灵活。

2020-09-08