【问题标题】:JAVA check if a string does not contain a sub string from a string array,JAVA检查字符串是否不包含字符串数组中的子字符串,
【发布时间】:2020-11-28 21:50:53
【问题描述】:

您好,我一定很累,因为我似乎无法完成这项工作,在我看来这是有道理的。我有一个 String[] 充满了 Android 应用程序名称,我试图在将结果写入 JSONArray 之前过滤掉它们。

 public static JSONArray appInfo = new JSONArray();
 public static String[] ignoreList = {"Google", "Maps", "Settings", "Phone", "Chrome", "Photos", "Duo", "YouTube", "Gmail", "Contacts", "Drive", "Clock", "Messages", "Files", "Calculator", "File manager", "Samsung", "Gallery", "LastPass", "OnePlus", "Weather"};

public void listApps(Context c) {

    PackageManager pm = c.getPackageManager();
    Intent main = new Intent(Intent.ACTION_MAIN, null);
    main.addCategory(Intent.CATEGORY_LAUNCHER);
    List<ResolveInfo> packages = pm.queryIntentActivities(main, 0);


    for (ResolveInfo resolve_info : packages) {
        try {
            String package_name = resolve_info.activityInfo.packageName;
            String app = (String) pm.getApplicationLabel(pm.getApplicationInfo(package_name, PackageManager.GET_META_DATA));

            for (String tempStr : ignoreList) {
                if (!app.contains(tempStr)) {
                    JSONObject json = new JSONObject(); // Create temp json object with app info.
                    json.put("app", app);
                    appInfo.put(json);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    try {
        Log.d("Debug", appInfo.toString(4));
    } catch (JSONException e) {
        e.printStackTrace();
    }

}

如果我要检查;

if (!app.contains("Google")) {

等等。然后我的JSONArray 将不包含带有“Google”的应用程序名称,但是当我遍历ignoreList 时,我得到以下JSON 来自ignoreList,而不是剩余的项目不在ignorList?它还不断重复对象吗?非常欢迎任何帮助。

    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Chrome"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Phone"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Settings"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Google Play Store"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Drive"
    },
    {
        "app": "Maps"
    },
    {
        "app": "Maps"
    },
    {
        "app": "Maps"
    },
    {
        "app": "Maps"
    }

【问题讨论】:

    标签: java android arrays string loops


    【解决方案1】:

    现在你有两个问题:

    1. 重复问题:因为您在将 app 添加到 JSON 列表时不会中断 for 循环,因此您会继续迭代 ignoreList 并将更多 app 实例添加到 JSON 列表。为避免您需要添加 break 语句。

    2. 添加应忽略的应用程序:这是因为您在比较每个应用程序之前将 app 添加到 JSON 列表中 来自ignoreListapp.. 的实例看起来很模糊,而且 对我来说:) 所以我会用例子来解释。

    例子:

    考虑您的应用 =“Settings”,现在您正在使用 for 循环将其与列表进行比较,因此首先将其与“Google”进行比较,它不等于它,因此将其添加到 JSON list,将其与“地图”进行比较时同样适用,依此类推,直到将其与“设置”进行比较>”,此时它不会添加到JSON list,但您已经多次添加它,然后才到达“设置”,因此您需要等到完成整个迭代后再添加appJSON list。我使用了boolean 来实现这一点。

    public void listApps(Context c) {
    
        PackageManager pm = c.getPackageManager();
        Intent main = new Intent(Intent.ACTION_MAIN, null);
        main.addCategory(Intent.CATEGORY_LAUNCHER);
        List<ResolveInfo> packages = pm.queryIntentActivities(main, 0);
    
        for (ResolveInfo resolve_info : packages) {
            try {
                String package_name = resolve_info.activityInfo.packageName;
                String app = (String) pm.getApplicationLabel(pm.getApplicationInfo(package_name, PackageManager.GET_META_DATA));
                boolean isIgnored = false;
    
                for (String tempStr : ignoreList) {
    
                    if (app.toLowerCase().contains(tempStr.toLowerCase())) {
                        isIgnored = true;
                        break; // to avoid unneeded iterations
                    }
                }
                if (!isIgnored) {
                    JSONObject json = new JSONObject(); // Create temp json object with app info.
                    json.put("app", app);
                    appInfo.put(json);
                }
    
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
        try {
            Log.d("Debug", appInfo.toString(4));
    
        } catch (JSONException e) {
            e.printStackTrace();
        }
    
    }
    

    【讨论】:

    • 非常感谢您的详细回复并花时间回答,这很有意义。
    猜你喜欢
    • 2021-12-14
    • 2011-11-09
    • 2013-05-18
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多