我有一个格式化的文本文件,我需要从该文本文件中提取信息并将其放入类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()));
但这有点丑陋,应该有一种方法使用正则表达式来完成,而不必专门为最后一个单词定制一行。最好在整个循环中只使用一个定界符。
答案 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解析的值