这就是我所拥有的:
char[] charArray = new char[] {'h','e','l','l','o'};
我想写下以下内容:
if(!charArray contains 'q'){
break;
}
我意识到.contains()不能在这里使用。我只是用“包含”来说明我正在尝试做什么。
答案 0 :(得分:26)
以下片段测试“不包含”条件,如问题中的示例伪代码所示。对于具有显式循环的直接解决方案,请执行以下操作:
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
}
答案 1 :(得分:4)
这种方法可以解决问题。
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...
}
答案 2 :(得分:3)
这是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'语句。
答案 3 :(得分:1)
您可以遍历数组,也可以将其转换为String
并使用indexOf
。
if (new String(charArray).indexOf('q') < 0) {
break;
}
创建一个新的String
有点浪费,但它可能是最简洁的代码。您还可以编写一种模拟效果的方法,而不会产生开销。
答案 4 :(得分:1)
如果您不想要自己的&#34; Utils&#34; -class:
,还有其他一些选择使用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'));
}
或使用内置Arrays:
@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类允许在数组中查找子数组。
答案 5 :(得分:0)
来自NumberKeyListener来源code。这个方法用于检查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迭代器,可能会更快一些。
答案 6 :(得分:-2)
您还可以将这些字符定义为字符串列表。然后,您可以使用list.Contains(x)方法检查字符是否对可接受的字符有效。