【发布时间】:2019-06-30 23:27:59
【问题描述】:
我有一个格式化的文本文件,我需要从中提取信息并将其放入类 Item 中的相应成员变量中(1 行文本 = 1 个 Item)。
我正在使用扫描仪和分隔符,但它只能识别; 分隔信息,而不能识别新行。
我尝试了几种不同的正则表达式,我最新的一个在下面,我只指定了我知道即将出现的分隔符。我也试过正则表达式 [;\\n] 。我唯一的结论是扫描仪处理换行符的方式与其他不同(这是有道理的,我知道它具有基于换行符的功能)。
这里是文本文件格式
1000;Knock Bits;88;12.67;8015
1001;Widgets;10;35.50;8004
1002;Grommets;20;23.45;8001
这是我的代码的样子
while (scan.hasNext())
{
Item item = new Item();
scan.useDelimiter("[;]");
item.setID(scan.nextInt());
item.setName(scan.next());
item.setQuantity(scan.nextInt());
item.setPriceInCents((int) scan.nextFloat()*100);
scan.useDelimiter("\\n");
item.setSupplierID(scan.nextInt());
}
除了最后一行使用nextInt() 获取供应商ID 之外,上述所有代码都有效。我知道我可以用
item.setSupplierID(Integer.parseInt(scan.nextLine()));
但这有点难看,应该有一种方法可以使用正则表达式来做到这一点,而不必专门为最后一个词定制一行。最好在整个循环中只使用一个分隔符。
【问题讨论】:
-
你试过
scan.useDelimiter("[;\n"]);吗? -
是的,还是不行。
-
如果你的行尾不是\n,它可能不起作用,这是可能的。请改用
"[;\\s]+"。
标签: java regex java.util.scanner