Java扫描程序定界符检测到';'但不是“ \ n”

时间:2019-02-06 22:07:10

标签: java regex java.util.scanner

我有一个格式化的文本文件,我需要从该文本文件中提取信息并将其放入类Item(1行文本= 1 Item)中的相应成员变量中。 我正在使用扫描仪和定界符,但它只能识别;分隔信息,不能识别新行。

我尝试了几种不同的regex表达式,而我的最新表达式则位于下面,在这里我仅指定要知道的定界符。我还尝试了正则表达式[;\\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()获取SupplierID之外。我知道我可以用

替换该行
item.setSupplierID(Integer.parseInt(scan.nextLine()));

但这有点丑陋,应该有一种方法使用正则表达式来完成,而不必专门为最后一个单词定制一行。最好在整个循环中只使用一个定界符。

2 个答案:

答案 0 :(得分:2)

使用 scanner.useDelimiter(“ [; \ n]”); scanner.useDelimiter(“ [; \ r \ n]”); Windows和Linux系统。

在while循环外调用它:

pg_basebackup

如果按照mypetlion的建议使用\ R: scanner.useDelimiter(“; | \\ R”);

答案 1 :(得分:0)

读取整行,然后使用string.split(“;”)获取元素

//Using the Import attribute
[Import(typeof(IVsPackageInstaller2))]
public IVsPackageInstaller2 packageInstaller;
packageInstaller.InstallLatestPackage(null, currentProject,
    "Newtonsoft.Json", false, false);

//Using the IComponentModel service
var componentModel = (IComponentModel)GetService(typeof(SComponentModel));
IVsPackageInstallerServices installerServices =
    componentModel.GetService<IVsPackageInstallerServices>();

var installedPackages = installerServices.GetInstalledPackages();

您可以代替对象来填充Map解析的值