这是事情。我有一个字符数组如下..
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
。
答案 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)
答案 4 :(得分:0)
您还可以使用String indexOf:
boolean ifExists = new String(modes).indexOf(mode) >= 0;
或
boolean ifExists = "mqhy".indexOf(mode) >= 0;