我有一个TextView类型的列表“allPay”。我需要在此列表中找到一个字符串“abc”。我使用“contains()”从这个列表中找到一个字符串,但即使列表包含这个字符串,我总是得到“false”作为答案。
以下是代码:
TextView tv_method_name = (TextView) findViewById(R.id.tv_method_name);
tv_method_name.setText("abc");
tv_method_name.setText("abcde");
List<TextView> allPay = new ArrayList<TextView>();
allpay.add(tv_method_name);
String str = "abc";
System.out.println("====allpay contains string?:" +
allPay.contains("abc"));
结果:
==== allpay包含字符串?:false
答案 0 :(得分:1)
您必须使用for循环或每个循环遍历Textviews列表以检查文本。只需使用此方法:
boolean listContains(List<TextView> txtViews, String textToCheck) {
for (TextView txtView : txtViews) {
if (txtView.getText().toString.contains(textToCheck)) {
return true;
}
}
return false;
}
然后使用:
if (listContains(allPay, "abc")) {
//"abc" is contained within one of the lists, do something
}
答案 1 :(得分:0)
你不能这样做:
allPay.contains("abc"));
因为该方法包含搜索对象...而不是对象的内容......
所以你问的TextViews列表是否包含一个String ..并且不正确
您可以搜索循环中的列表并使用String#indexOf()方法
进行搜索List<String> allPay = new ArrayList<String>();
allpay.add(tv_method_name);
allpay.add(tv_method_name);
allpay.add(tv_method_name);
allpay.add(tv_method_name);
allpay.add(tv_method_name);
for (TextView tv : allPay) {
if (tv.getText.toString().indexOf("abc")!=-1) {
System.out.println("Found!!");
}
}
答案 2 :(得分:0)
我认为问题出在这一部分。
TextView tv_method_name = (TextView) findViewById(R.id.tv_method_name);
tv_method_name.setText("abc");
tv_method_name.setText("abcde");
tv_method_name被修改两次,因此变量中的最后一个值是“abcde”,当你查看值为“abc”的列表时,方法“Contains”返回“false”,因为这个对象没有存在。
答案 3 :(得分:0)
您有一个TextView对象列表,并且您正在搜索String。那不行。
尝试以下方法:
String yourText = "abc";
for(TextView tv: allPlay){
if(tv!=null && tv.getText()!=null && tv.getText().toString().contains(yourText)){
Log.d(TAG,"found:" + true);
}
}