1

我很困惑为什么以下测试集成员资格的方法在我的程序中不起作用。如果我使用任何文本文件作为参数运行以下程序,则在输出中我只会看到“第二”。我认为两个 if 语句都应该测试相同的东西。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;



public class Exc0 {

    public static void main(String args[]){
        try {
            File input = new File(args[0]);
            BufferedReader reader = new BufferedReader(new FileReader(input));
            int[] delimiters = {' ', '(', ',', ')'};

            int current;
            while ((current = reader.read()) != -1){
                if ((Arrays.asList(delimiters).contains(current))){
                    System.out.println("First");
                }
                if (current == ' ' || current == '(' || current == ',' || current == ')'){
                    System.out.println("Second");
                }
            }


        }
        catch (IOException e){
            e.printStackTrace();
        }
    }

}
4

2 回答 2

3

发生这种情况是因为当您调用时,Arrays.asList(delimiters)您会得到一个包含单个实例的列表int[],而不是四个int/实例Integer

一般来说,要检查字符集的成员资格,您可能最好使用 a String

String delimiters = "() ,";
if (delimiters.indexOf(current) >= 0) {
    System.out.println("First");
}
于 2013-02-13T00:50:41.400 回答
1

(根据其他答案更正)

既然没有List<int>Arrays.asList(int[] something)不能返回你所希望的。虽然起初我认为它会返回 a List<Integer>,但事实并非如此。正如 dasblinkenlight 指出的那样,它实际上会返回一个List<int[]>带有一个元素的元素。(因此,声明current为 anInteger而不是 anint不会修复错误,而是按照Marc Baumbach 在评论中的建议声明delimiters为可能的遗嘱。)Integer[]

于 2013-02-13T00:46:51.687 回答