0

这是一个简单的代码,应该可以证明我的问题的重点。我不知道是否有比这个更有效的数组实现。让我感到不舒服的是,我们必须将条件写入if()每个元素的块中,并且这使代码更长。有什么方法可以将某个数组的所有元素包含在一行中?谢谢!

public class test{
  static String[] text;

public static void main(String args[]){
     text=new String[5];
     text[0]="hello";
     ...
     text[4]="bye";

     if(text[0].contains("something")==true||...text[4].contains("something")==true)
          //do something     
  }
}
4

3 回答 3

4

Either use a loop:

for (String item: text) {
    if (item.contains("something")) {
       // TODO condition
    }
}

... or use an ugly workaround, such as:

if (Arrays.toString(text).contains("something")) {
    // TODO condition
}
于 2013-08-09T18:39:08.273 回答
2

您可以编写自己的方法来做到这一点:

public static anyContain(String[] array, CharSequence sub) {
    for (String s : array)
        if (s.contains(sub))
            return true;

    return false;
}

然后if- 语句将是

if (anyContain(text, "something")) {
    ...
}
于 2013-08-09T18:41:01.730 回答
0

我认为这是最好的方法(仅适用于完全相等的元素):

text=new String[5];
...
if (Arrays.asList(text).contains("something")) {
  // you code here
}

如果您需要测试,contains您还可以执行以下操作:

String[] test = new String[] {"one", "two", "something", "three"};
Arrays.sort(test);
int index = Arrays.binarySearch(test, "something", new Comparator<String>() {
  @Override
  public int compare(String o1, String o2) {
    return o1.contains(o2) ? 0 : -1;
  }
});

结果,您还可以获得数组中元素的索引。如果没有找到,则为负值。

于 2013-08-09T18:53:57.183 回答