我一直在研究这个问题大约五个小时,实现了许多不同的方法来实现这个目标,但似乎没有任何工作。我正处于我甚至不能再思考的地步,所以我在这里发帖。
我有一个检索字符串的共享首选项。该字符串被转换为字符串数组。我有一个2d数组,其中有四个数组设置为索引。我想循环遍历2d数组并将我的字符串数组与它进行比较。如果在我的字符串数组中找到每个2d数组索引的内容,则打印true,否则为false。
final SharedPreferences sharedPref = CocktailsFrag.this.getActivity().getPreferences(Activity.MODE_PRIVATE);
//recall stored ingredients
String arrayString = sharedPref.getString("myIngredients", null);
if(arrayString ==null) {
//do nothing
} else {
String str1 = arrayString.replace("[", "");
String str2 = str1.replace("]", "");
String[] strValues = str2.split(",");
String drink1[] = {"Ale", "Brandy"};
String drink2[] = {"Vodka", "Tobasco Sauce"};
String drink3[] = {"Lager", "Stout"};
String drink4[] = {"Guiness", "Champagne"};
String[][] arrays = {drink1, drink2, drink3, drink4};
for(int i=0; i<arrays.length-1;i++) {
String[] indexValue = arrays[i];
if(strValues[i].contains(indexValue[i])) {
Toast.makeText(getActivity().getApplicationContext(), indexValue[i]+ "", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity().getApplicationContext(), "false", Toast.LENGTH_LONG).show();
}
}
}
有关如何实现这一目标的任何想法?
答案 0 :(得分:0)
这段代码不如简单地迭代数组那么高效,但它与元素数量无关,而且更容易阅读。
final SharedPreferences sharedPref = CocktailsFrag.this.getActivity().getPreferences(Activity.MODE_PRIVATE);
//recall stored ingredients
String arrayString = sharedPref.getString("myIngredients", null);
if(arrayString ==null) {
//do nothing
} else {
String str1 = arrayString.replace("[", "").replace("]", "");
List<String> strValues2 = Arrays.asList(str1.split(","));
String drink1[] = {"Ale", "Brandy"};
String drink2[] = {"Vodka", "Tobasco Sauce"};
String drink3[] = {"Lager", "Stout"};
String drink4[] = {"Guiness", "Champagne"};
String[][] arrays = {drink1, drink2, drink3, drink4};
for(String[] drinkArr : arrays){
if(strValues2.containsAll(Arrays.asList(drinkArr))) {
Toast.makeText(getActivity().getApplicationContext(), "true", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity().getApplicationContext(), "false", Toast.LENGTH_LONG).show();
}
}
}
如果您想使用数组执行此操作,则只有以下一个选项。
for(String[] drinkArr : arrays) {
boolean allDrinksFound = true;
for(int i = 0; i < drinkArr.length; i++) {
boolean drinkFound = false;
for(int j = 0; j < strValues.length; j++) {
if(drinkArr[i].equals(strValues[j])) {
drinkFound = true;
break;
}
}
allDrinksFound = allDrinksFound && drinkFound;
}
if(allDrinksFound) {
Toast.makeText(getActivity().getApplicationContext(), "true", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity().getApplicationContext(), "false", Toast.LENGTH_LONG).show();
}
}