【发布时间】:2012-09-28 13:20:52
【问题描述】:
假设我得到了这个数组:
字符串[][]数组 = 新字符串[5][5];
数组[2][2] = 绝望;
能不能查到
String s = "绝望"; - 等于任何数组元素而不使用for循环,也不必手动输入赋值为“desperate”的数组的行列组合?
【问题讨论】:
-
出于好奇:你需要一个二维字符串数组来做什么?
假设我得到了这个数组:
字符串[][]数组 = 新字符串[5][5];
数组[2][2] = 绝望;
能不能查到
String s = "绝望"; - 等于任何数组元素而不使用for循环,也不必手动输入赋值为“desperate”的数组的行列组合?
【问题讨论】:
while 循环而不是 for 循环
int i = 0;
int j = 0;
while (i < n)
{
while (j < m)
{
if (array[i][j].equals("..."))
{
///
}
j++;
}
i++;
}
【讨论】:
使用增强的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<String> 来存储您的项目。然后您可以调用contains() 方法来检查列表是否包含该元素..
List<String> listString = new ArrayList<String>();
listString.add("desperate");
listString.add("despe");
if (listString.contains("desperate")) {
System.out.println("True");
}
输出:- 真
【讨论】:
假设您不能(出于任何原因)将您的数组更改为另一种集合类型:
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)。
【讨论】:
避免使用循环的唯一方法(不清楚为什么要这样做)是使用预先构建的包含所有字符串和索引的 Map。
【讨论】: