如何查找java中字符数组中是否存在元素

时间:2013-01-23 16:31:45

标签: java arrays

这是事情。我有一个字符数组如下..

char[] modes = new char[] { 'm', 'q', 'h', 'y' };

现在我想为用户提供输入字符的选项。如果它存在于modes数组中,我将做必要的事情。为此,我用了......

//to take a character as input
mode = input.next().charAt(0);
//now to check if the array contains the character
boolean ifExists = Arrays.asList(modes).contains(mode);

但奇怪的是ifExists会返回false

  1. 我在哪里做错了?
  2. 如果这是一种不好的方式,请提出建议。

5 个答案:

答案 0 :(得分:3)

我认为它是Autoboxing - contains()方法接受一个对象,而不是一个原语。

如果使用Character而不是char,它将起作用:

    Character[] modes = new Character[] { 'm', 'q', 'h', 'y' };

    //to take a character as input
    Character mode = "q123".charAt(0);
    //now to check if the array contains the character
    boolean ifExists = Arrays.asList(modes).contains(mode);

返回true

答案 1 :(得分:3)

Arrays.asList()方法返回一个char []列表,而不是像你期望的那样返回一个char列表。我建议使用Arrays.binarySort()方法,如下所示:

    char[] modes = new char[] { 'm', 'q', 'h', 'y' };

    char mode = 'q';

    //now to check if the array contains the character
    int index = Arrays.binarySearch(modes, mode);
    boolean ifExists = index != -1;
    System.out.print(ifExists);

答案 2 :(得分:1)

我没有发现您的代码有任何问题并尝试此操作,

如果你使用这种集合,那么你可以使用默认的方法做很多操作......

List<Character> l = new ArrayList<Character>();
l.add('a');
l.add('b');
l.add('c');
System.out.println(l.contains('a'));

答案 3 :(得分:1)

您只需转换为字符串,然后运行contains

即可
new String(modes).contains("" + mode);

然后应该为原始数组返回true或false

答案 4 :(得分:0)

您还可以使用String indexOf:

boolean ifExists = new String(modes).indexOf(mode) >= 0;

boolean ifExists = "mqhy".indexOf(mode) >= 0;