我有一些作业需要我从使用":“(冒号)作为分隔符的文本文件中读取。该文件的内容是有关动物的信息,包括名称、身高和大小等。文件中的文本包含浮点数、整数和字符串,但是,主要问题是当读取从下一行获取的信息时,这是因为每一行的最后字符串没有以":“结尾,而是以句号结尾。
文件:
Saltwater Crocodile:453:17:50:7:88:Crocodiles can slow their heartbeat down to two beats per minute.
Praying Mantis:0.02:0.22:41:5:39:They can turn their heads up to 180 degrees in search of insects.我首先使用名为s.hasNext的扫描器将文本文件放入数组中。
当使用分隔符s.useDelimiter(“”)时;
程序会打印出来
人类直到大约100年前才知道它们的存在。咸水鳄鱼
而不仅仅是“它们的存在直到100年前才被人类所知”。当被召唤的时候。
我尝试为分隔符添加一个句号,比如这个scan.useDelimiter(":.");但是,当我这样做时,它会干扰同样具有“”的浮点数。
try (
Scanner s = new Scanner(new File(dataPath))) {
s.useDelimiter("[:]");
ArrayList<String> animalArr = new ArrayList();
while (s.hasNext()) {
animalArr.add(s.next());
}
System.out.println(animalArr.get(7));人类直到大约100年前才知道它们的存在。咸水鳄鱼
只是没有下一行信息是前一行字符串的一部分。我已经想了两天了,我需要所有我能得到的帮助。也许有一种方法可以忽略句号,对不起我的无能。
System.out.println(animalArr.get(7));
人类直到大约100年前才知道它们的存在。咸水鳄鱼
成为
“人类直到大约100年前才知道它们的存在”。从根本上说
发布于 2018-12-28 15:29:43
您将分隔符设置为使用":“,这将告诉.next()方法查找":”为止的所有文本。在你的情况下,它是:
人类直到大约100年前才知道它们的存在。咸水鳄鱼
我会使用.hasNextLine()和.nextLine()来获取文件中的每一行(因为每一行都有一个硬停止)。然后使用myLine.split(":")获取行中的每个字段。
发布于 2018-12-28 16:14:19
此代码解决了您的问题:
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();
}活生生的例子(通过适配以显示没有文件的结果):
https://stackoverflow.com/questions/53960604
复制相似问题