[编辑]好的,我明白了,让我重新制定。 numVol为45 ,文件内容为
54;a;23;c;de;56
23;d;24;c;h;456
45;87;c;y;535
432;42;h;h;543
但是我仍然无法解决我的问题,因此它返回543.所以我想要做的是当行等于 numVol 时返回行但是只检查第一个数字。
我在比较两个字符串时遇到了麻烦。假设我有一个包含以下内容的.csv文件:54;a;b;c;de
并且 numVol 值为54.该方法应返回54但由于某种原因它不会输入“if”它返回“de”。
public static String test(int numVol)throws Exception{
File file = new File("test.csv");
Scanner scanner = new Scanner(file);
scanner.useDelimiter(";");
String line = "";
String sNumVol = ""+numVol; //create a string with numVol value in it
while (scanner.hasNext()){
line = scanner.next();
if(line.equals(sNumVol)){
scanner.close();
return line;
}
}
scanner.close();
return line;
}
答案 0 :(得分:2)
问题是,既然您已告诉Scanner
使用;
作为分隔符,那么 不再使用空格作为分隔符。因此针对"45"
测试的令牌不是"45"
,而是"456\n45"
(上一行的结尾,换行符和下一行的开头) ),这不匹配。
更改您的useDelimiter
行,使用 分号和空格作为分隔符:
scanner.useDelimiter("[;\\s]");
...然后扫描程序会分别看到"456"
和"45"
,并与"45"
匹配。
此代码:
import java.util.*;
import java.io.*;
public class Parse {
public static final void main(String[] args) {
try {
String result = test(45);
System.out.println("result = " + result);
}
catch (Exception e) {
System.out.println("Exception");
}
}
public static String test(int numVol)throws Exception{
File file = new File("test.csv");
Scanner scanner = new Scanner(file);
scanner.useDelimiter("[;\\s]"); // <==== Change is here
String line = "";
String sNumVol = ""+numVol;
while (scanner.hasNext()){
line = scanner.next();
if(line.equals(sNumVol)){
scanner.close();
return line;
}
}
scanner.close();
return line;
}
}
使用此test.csv
:
54;a;23;c;de;56 23;d;24;c;h;456 45;87;c;y;535 432;42;h;h;543
显示:
$ java Parse result = 45
找到这个问题的答案的方法只是用调试器遍历代码并观察line
的值,或者(如果由于某种原因你没有调试器?! ),在循环中插入System.out.println("line = " + line);
语句以查看正在比较的内容。例如,如果您在上面的System.out.println("line = " + line);
行上方插入line = scanner.next();
,则只需使用";"
作为分隔符:
import java.util.*;
import java.io.*;
public class Parse {
public static final void main(String[] args) {
try {
String result = test(45);
System.out.println("result = " + result);
}
catch (Exception e) {
System.out.println("Exception");
}
}
public static String test(int numVol)throws Exception{
File file = new File("test.csv");
Scanner scanner = new Scanner(file);
scanner.useDelimiter(";"); // <== Just using ";"
String line = "";
String sNumVol = ""+numVol;
while (scanner.hasNext()){
line = scanner.next();
System.out.println("line = [[" + line + "]]");
if(line.equals(sNumVol)){
scanner.close();
return line;
}
}
scanner.close();
return line;
}
}
你看到了:
$ java Parse line = [[54]] line = [[a]] line = [[23]] line = [[c]] line = [[de]] line = [[56 23]] line = [[d]] line = [[24]] line = [[c]] line = [[h]] line = [[456 45]] line = [[87]] line = [[c]] line = [[y]] line = [[535 432]] line = [[42]] line = [[h]] line = [[h]] line = [[543 ]] result = 543
...这有助于可视化问题。