[英]JAVA, comparing two strings
[編輯]好的,我明白了,讓我重新制定。 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”並返回“德”。
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;
}
問題是,現在您告訴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
...這有助於可視化問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.