JAVA,比较两个字符串

时间:2013-05-05 21:45:58

标签: java string compare

[编辑]好的,我明白了,让我重新制定。 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;
}

1 个答案:

答案 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

...这有助于可视化问题。