【问题标题】:Possible to find whether a String array value equals any random typed string?可以找到一个字符串数组值是否等于任何随机类型的字符串?
【发布时间】:2012-09-28 13:20:52
【问题描述】:

假设我得到了这个数组:

字符串[][]数组 = 新字符串[5][5];

数组[2][2] = 绝望;

能不能查到

String s = "绝望"; - 等于任何数组元素而不使用for循环,也不必手动输入赋值为“desperate”的数组的行列组合?

【问题讨论】:

  • 出于好奇:你需要一个二维字符串数组来做什么?

标签: java arrays loops


【解决方案1】:

while 循环而不是 for 循环

int i = 0;
int j = 0;  
while (i < n)  
{  
   while (j < m)  
   {  
      if (array[i][j].equals("..."))
      {  
         /// 
      }  
      j++;
   }   
   i++;    
}  

【讨论】:

【解决方案2】:

使用增强的for循环:-

String [][] array = new String[2][2];
array[1][1] = "desperate";
array[0][1] = "despee";
array[1][0] = "despete";
array[0][0] = "dete";

for (String[] innerArr: array) {
    for (String value: innerArr) {
         if (value.equals("desperate")) {
             System.out.println(value + " == desperate");
         }
    }
}

输出:- 绝望 == 绝望

我建议的更好方法是使用ArrayList&lt;String&gt; 来存储您的项目。然后您可以调用contains() 方法来检查列表是否包含该元素..

List<String> listString = new ArrayList<String>(); 
listString.add("desperate");
listString.add("despe");

if (listString.contains("desperate")) {
     System.out.println("True");
}

输出:-

【讨论】:

  • 在增强的 for 循环中 (String[] innerArr: array) 是否只搜索行数组?
  • 正是...... >
【解决方案3】:

假设您不能(出于任何原因)将您的数组更改为另一种集合类型:

String[][]array = new String[5][5];
array[2][2] = "desperate"; 


public boolean contains(String str){
  return new HashSet<String>((List<String>)Arrays.asList(array)).contains(str);
}

比将其转换为 List 更好,因为 HashSet 的 contains() 方法是 O(1),而来自 List 的方法是 O(n)。

【讨论】:

    【解决方案4】:

    避免使用循环的唯一方法(不清楚为什么要这样做)是使用预先构建的包含所有字符串和索引的 Map。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      相关资源
      最近更新 更多