在Java中,如何确定char数组是否包含特定字符?

这就是我所拥有的:

char[] charArray = new char[] {'h','e','l','l','o'}; 

我想写一些东西效果:

 if(!charArray contains 'q'){ break; } 

我意识到.contains()不能在这里使用。 我只是用“包含”来说明我正在尝试做什么。

以下片段测试“不包含”条件,如问题中的示例伪代码所示。 对于具有显式循环的直接解决方案,请执行以下操作:

 boolean contains = false; for (char c : charArray) { if (c == 'q') { contains = true; break; } } if (!contains) { // do something } 

另一种选择,使用String提供contains()方法的事实:

 if (!(new String(charArray).contains("q"))) { // do something } 

还有一个选择,这次使用indexOf()

 if (new String(charArray).indexOf('q') == -1) { // do something } 

这是Oscar的第一个版本的变体,它不使用for-each循环。

 for (int i = 0; i < charArray.length; i++) { if (charArray[i] == 'q') { // do something break; } } 

你可以在循环之前将一个布尔变量设置为false,然后使“do something”将变量设置为true,这可以在循环之后进行测试。 循环也可以包含在函数调用中,然后使用'return true'而不是break,并在for循环后添加'return false'语句。

这种方法可以解决问题。

 boolean contains(char c, char[] array) { for (char x : array) { if (x == c) { return true; } } return false; } 

用法示例:

 class Main { static boolean contains(char c, char[] array) { for (char x : array) { if (x == c) { return true; } } return false; } public static void main(String[] a) { char[] charArray = new char[] {'h','e','l','l','o'}; if (!contains('q', charArray)) { // Do something... System.out.println("Hello world!"); } } } 

替代方式:

 if (!String.valueOf(charArray).contains("q")) { // do something... } 

您可以遍历数组,也可以将其转换为String并使用indexOf

 if (new String(charArray).indexOf('q') < 0) { break; } 

创建一个新的String有点浪费,但它可能是最简洁的代码。 您还可以编写一种模拟效果的方法,而不会产生开销。

如果您不想要自己的“Utils”类,还有其他一些选项:

使用Apache commons lang( ArrayUtils ):

 @Test public void arrayCommonLang(){ char[] test = {'h', 'e', 'l', 'l', 'o'}; Assert.assertTrue(ArrayUtils.contains(test, 'o')); Assert.assertFalse(ArrayUtils.contains(test, 'p')); } 

或者使用内置数组 :

 @Test public void arrayTest(){ char[] test = {'h', 'e', 'l', 'l', 'o'}; Assert.assertTrue(Arrays.binarySearch(test, 'o') >= 0); Assert.assertTrue(Arrays.binarySearch(test, 'p') < 0); } 

或者使用Google Guava中的Chars类:

 @Test public void testGuava(){ char[] test = {'h', 'e', 'l', 'l', 'o'}; Assert.assertTrue(Chars.contains(test, 'o')); Assert.assertFalse(Chars.contains(test, 'p')); } 

稍微偏离主题,Chars类允许在数组中查找子数组。

来自NumberKeyListener源代码 。 这个方法用于检查char是否包含在已定义的接受字符数组中:

 protected static boolean ok(char[] accept, char c) { for (int i = accept.length - 1; i >= 0; i--) { if (accept[i] == c) { return true; } } return false; } 

它与@ÓscarLópez解决方案类似。 由于缺少foreach迭代器,可能会更快一些。