检查String []中的String是否在ArrayList <string> </string>中

时间:2011-10-26 08:04:00

标签: java android arraylist arrays

我刚刚构建了一个广播接收器,我可以使用它来获取传入的文本消息,而不是在有空格时拆分文本消息并将其保存到String[]

现在我需要检查此String[]中是否有来自我的数据库的内容。为此,我创建了一个ArrayList<String>,它从相应的列中获取所有条目。现在我需要检查ArrayList中的String[]中的字符串是否与来自短信的 package de.retowaelchli.filterit.services; import java.util.ArrayList; import de.retowaelchli.filterit.database.SFilterDBAdapter; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.telephony.SmsMessage; import android.util.Log; import android.widget.Toast; public class SmileySmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //Datenbank definieren SFilterDBAdapter mDbHelper = new SFilterDBAdapter(context); //---get the SMS message passed in--- Log.d("SmileySmsReceiver", "Yes it calls the onReceive"); Bundle bundle = intent.getExtras(); SmsMessage[] msgs = null; String str = ""; if (bundle != null) { Log.d("SmileySmsReceiver", "Bundle is not null"); //---retrieve the SMS message received--- Object[] pdus = (Object[]) bundle.get("pdus"); msgs = new SmsMessage[pdus.length]; for (int i=0; i<msgs.length; i++){ msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); str += "SMS from " + msgs[i].getOriginatingAddress(); str += " :"; str += msgs[i].getMessageBody().toString(); str += "\n"; Log.d("SmileySmsReceiver","Was steht in der Nachricht?: " + str); String[] splited = str.split("\\s+"); //Hier werden die Strings der Smileys aus der Datenbank gezogen mDbHelper.open(); Cursor c = mDbHelper.getAllSFilter(); ArrayList<String> SmileyList = new ArrayList<String>(); c.getColumnIndex(SFilterDBAdapter.KEYWORD); int ColumnIndex = c.getColumnIndex(SFilterDBAdapter.KEYWORD); if(c!=null) { //Hier werden die Smileys in die ArrayList geschrieben while(c.moveToNext()){ String infoItem = c.getString( ColumnIndex ); SmileyList.add(infoItem); } <------------------------- FROM HERE ON I NEED YOUR GUYS HELP -------------------------------> } } //---display the new SMS message--- Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); } } } 相同,但我不知道如何实现。

有没有一种简单快捷的方法来检查,我还需要知道它们中的哪个字符串?

SmileySmsReceiver:

{{1}}

4 个答案:

答案 0 :(得分:15)

如果您有String myStringArrayList<String> myListOfStrings,则可以检查列表中是否有myString,如下所示:

myListOfStrings.contains( myString );

这将返回一个布尔值(true / false) - 如果找到字符串则为true,否则返回false。

在你的情况下,你想要遍历字符串数组并将它们中的每一个匹配到SmileyList,如下所示:

for( String s : splitted ) {
   if( SmileyList.contains( s ) ) {
     //Do what you need to do if the string is in the SmileyList.
   }
}

答案 1 :(得分:3)

String array[] = ... ; 
List<String> list = ... ;
// check if anything in array is in list
for(String str : array)
    if(list.contains(str)) doSomething() ;

如果你想为每场比赛做点什么,上面的代码就可以了。如果你只想做一次匹配(而不是每次匹配),你需要在if语句中添加break语句。

答案 2 :(得分:2)

您可以遍历数组(例如,使用for上的splitted.length循环),使用myList.contains(splitted[i])查询您的列表。该查询将返回boolean

如果您需要检查列表中是否存在数组中的所有项目,那么myList.containsAll(Arrays.asList(splitted))

就是一个舒适的选择

还有另一个简洁的替代方案,没有循环来检查列表中是否存在任何项目:

List splitList = Arrays.asList(splitted);
splitList.retainAll(myList);

splitList.isEmpty()将返回false,如果列表的任何项匹配。

splitList的内容将显示所有匹配的字符串。

答案 3 :(得分:1)

根据数组和ArrayList的大小以及访问它们的次数,您可能希望使用HashSet而不是ArrayList,以便使用散列contains()方法快速查找而不是必须遍历ArrayList。像这样:

boolean containsString(ArrayList<String> stringArrayList, String[] stringArray) {
    Set<String> stringSet = new HashSet<String>(stringArrayList); // if same input is used reused, might want this outside the method

    for (String s : stringArray) {
        if (stringSet.contains(s)) {
            return true;
        }
    }

    return false;
}