我有一些作业需要我从使用“:”(冒号)作为分隔符的文本文件中读取。文件的内容是有关动物的信息,包括名称,高度和大小等。文件中的文本包含浮点数,整数和字符串,但是主要问题是在读取文件时它从下一行接收信息,这是因为每行所包含的最后一个字符串不是以“:”结尾,而是句号
文件:
Internship Notes
我首先使用名为s.hasNext的扫描程序将文本文件放入arraylist
使用分隔符时 s.useDelimiter(“ [:]”);
程序将打印出
“直到100年前,人类才知道它们的存在。 盐水鳄鱼”
不仅仅是“他们的存在直到大约100年前才为人类所知”。
我尝试像这样在分隔符中添加句号 scan.useDelimiter(“ [:.]”); 但是,当我这样做时,它就会与也带有“。”的花车混淆。
SELECT
[Employer Contact].Employer,
[Employer Type/Intern Functions].Type,
[Employer Type/Intern Functions].[Intern Functions/Responsibilities],
[Internship Notes].Date,
[Internship Notes].Specialist,
[Internship Notes].Notes
FROM
(
[Employer Contact] LEFT JOIN [Internship Notes] ON
[Employer Contact].[Employer] = [Internship Notes].[Employer]
)
LEFT JOIN [Employer Type/Intern Functions] ON
[Employer Contact].[Employer] = [Employer Type/Intern Functions].[Employer]
WHERE
[Employer Contact].Employer = [Forms]![Employer Record Search]![cboChooseEmp] OR
[Forms]![Employer Record Search]![cboChooseEmp] IS NULL;
“直到100年前,人类才知道它们的存在。 盐水鳄鱼”
只有下一行信息不在前几行字符串中。 香港专业教育学院一直试图找出这2天,现在,我需要我所能获得的所有帮助。也许有一种方法可以忽略句号,对不起,我感到抱歉。
System.out.println(animalArr.get(7));
“直到100年前,人类才知道它们的存在。 盐水鳄鱼”
成为
“直到100年前,人类才知道它们的存在”。 基本上是tldr
答案 0 :(得分:0)
您正在将定界符设置为使用“:”,它告诉.next()
方法查找直到“:”为止的所有文本。您的情况是:
“直到100年前,人类才知道它们的存在。咸水鳄鱼”
我将使用.hasNextLine()
和.nextLine()
来获取文件中的每一行(因为每一行都有一个硬停止符)。然后使用myLine.split(":")
获取该行中的每个字段。
答案 1 :(得分:0)
此代码解决了您的问题:
try {
ArrayList<String> animalArr = new ArrayList();
Scanner s = new Scanner(new File(dataPath));
s.useDelimiter("[:]");
while (s.hasNext()) {
String txt = s.next();
if(txt.contains(".") && !txt.matches("-?\\d+(\\.\\d+)?")) {
String txt1 = txt.substring(0, txt.lastIndexOf(".") + 1);
String txt2 = txt.substring(txt.lastIndexOf(".") + 1, txt.length());
animalArr.add(txt1.trim());
animalArr.add(txt2.trim());
} else {
animalArr.add(txt);
}
}
for(String a : animalArr) {
System.out.println(a);
}
} catch(Exception e) {
e.printStackTrace();
}