Java阵列的有效使用/替代方案

Java阵列的有效使用/替代方案,java,arrays,Java,Arrays,这是一段简单的代码,应该可以说明我的问题所在。我不知道是否还有比这更有效的数组实现。让我感到不舒服的是,我们必须将条件写入if()中为每个元素设置块,这会使代码更长。有没有办法在一行中包含某个数组的所有元素?谢谢大家! public class test{ static String[] text; public static void main(String args[]){ text=new String[5]; text[0]="hello"; ...

这是一段简单的代码,应该可以说明我的问题所在。我不知道是否还有比这更有效的数组实现。让我感到不舒服的是,我们必须将条件写入
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     
  }
}
或者使用循环:

for (String item: text) {
    if (item.contains("something")) {
       // TODO condition
    }
}
。。。或者使用难看的解决方法,例如:

if (Arrays.toString(text).contains("something")) {
    // TODO condition
}
或者使用循环:

for (String item: text) {
    if (item.contains("something")) {
       // TODO condition
    }
}
。。。或者使用难看的解决方法,例如:

if (Arrays.toString(text).contains("something")) {
    // TODO condition
}

您可以编写自己的方法来实现这一点:

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

    return false;
}
然后将调用
if
-语句

if (anyContain(text, "something")) {
    ...
}

您可以编写自己的方法来实现这一点:

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

    return false;
}
然后将调用
if
-语句

if (anyContain(text, "something")) {
    ...
}

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

如果您需要测试
包含的内容
,您还可以执行以下操作:

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;
  }
});
String[]test=新字符串[]{“一”、“二”、“某物”、“三”};
数组。排序(测试);
int index=Arrays.binarySearch(测试,“某物”,新的比较器(){
@凌驾
公共整数比较(字符串o1、字符串o2){
返回o1。包含(o2)?0:-1;
}
});

因此,还可以获得数组中元素的索引。如果找不到,则为负值。

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

如果您需要测试
包含的内容
,您还可以执行以下操作:

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;
  }
});
String[]test=新字符串[]{“一”、“二”、“某物”、“三”};
数组。排序(测试);
int index=Arrays.binarySearch(测试,“某物”,新的比较器(){
@凌驾
公共整数比较(字符串o1、字符串o2){
返回o1。包含(o2)?0:-1;
}
});


因此,还可以获得数组中元素的索引。如果找不到,则为负值。

是否要检查包含性或相等性?我的意思是这个值会是真的吗?
“asf something ABC”
?我很抱歉,我写了这个代码,你不需要
==true
。您可以使用
文本[0]。包含(“某物”)| |……
,它的工作方式也一样。@JohnSmith。我想你误解了我的评论。我的意思是,
text[0]
应该只包含
某个东西
,还是应该等于
某个东西
?您要检查包含还是相等?我的意思是这个值会是真的吗?
“asf something ABC”
?我很抱歉,我写了这个代码,你不需要
==true
。您可以使用
文本[0]。包含(“某物”)| |……
,它的工作方式也一样。@JohnSmith。我想你误解了我的评论。我的意思是,应该
text[0]
只包含
something
,还是应该等于
something
?我认为只有第一个版本是正确的。
数组。toString([“c”,“a”,“r”)。contains(“car”)->true
@arshajii谢谢,现在将修复循环:)@rendon nope。尝试初始化
String[]car=new String[]{“c”、“a”、“r”}
并打印
数组。toString(car)
。但是如果您正在搜索的字符串是
”、“
”[“
@arshajii),则仍然可能会出现问题。这就是为什么它被称为“丑陋的解决方法”。我回答中的第一个for循环是我通常使用的。我认为只有第一个版本是正确的。
Arrays.toString([“c”,“a”,“r”)。contains(“car”)->true
@arshajii谢谢,现在将修复for循环:)@rendon nope。尝试初始化
String[]car=new String[]{“c”、“a”、“r”}
并打印
数组。toString(car)
。但是如果您正在搜索的字符串是
”、“
”[“
@arshajii),则仍然可能会出现问题。这就是为什么它被称为“丑陋的解决方法”。我的答案中的第一个for循环是我通常使用的。它不检查单个字符串是否包含
“something”
,它只检查数组本身是否包含它。@arshajii:你说得对,我只是修正了我的答案,它不检查单个字符串是否包含
“something”
,它只是检查数组本身是否包含它。@arshajii:你说得对,我只是修正了我的答案