簡體   English   中英

JAVA,比較兩個字符串

[英]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;denumVol值為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM