【问题标题】:Searching for a string in a String-Array item element在字符串数组项元素中搜索字符串
【发布时间】:2026-01-31 00:20:03
【问题描述】:

如何在字符串数组项元素中搜索特定文本?以下是 xml 文件的示例。字符串数组名称是 android。我在字符串数组中有一些项目。现在我想搜索“软件”这个词。请告诉我该怎么做?

<?xml version="1.0" encoding="utf-8"?><resources>
<string-array name="android">
    <item>Android is a software stack for mobile devices that includes an operating system, middleware and key applications.</item>
    <item>Google Inc. purchased the initial developer of the software, Android Inc., in 2005..</item>
</string-array>

【问题讨论】:

    标签: android


    【解决方案1】:

    这种方法性能更好:

    String[] androidStrings = getResources().getStringArray(R.array.android);   
    if (Arrays.asList(androidStrings).contains("software") {
        // found a match to "software"           
    }
    

    Arrays.asList().contains() 比使用 for 循环更快。

    【讨论】:

    • 这不会做 OP 想要的,它(基于发布的示例)是查找列表中 包含 单词“软件”的元素。这只会找到与“软件”一词​​等于(整体上)的元素。此外,List.contains 在内部使用循环;它并不比在您自己的代码中使用循环快。此外,您还需要在 String[] 周围创建 List 包装器。
    【解决方案2】:

    我假设您想在代码中执行此操作。 api 中没有对整个 String 数组进行文本匹配的内容;你需要一次做一个元素:

    String[] androidStrings = getResources().getStringArray(R.array.android);
    for (String s : androidStrings) {
        int i = s.indexOf("software");
        if (i >= 0) {
            // found a match to "software" at offset i
        }
    }
    

    当然,您可以使用 Matcher 和 Pattern,或者如果您想知道匹配项在数组中的位置,可以使用索引遍历数组。但这是一般方法。

    【讨论】:

    • 但是如果我们必须从strings.xml文件中的字符串中搜索呢?
    • @CopsOnRoad - 我不确定这个问题是什么意思。您的意思是在资源文件中以某种方式指定搜索逻辑吗?安卓不支持。如果您的意思是在 Java 代码中搜索 strings.xml 中声明的所有字符串,Android 也不支持,因为字符串资源的文件名被资源编译器丢弃。您也许可以使用反射通过遍历R.strings 的字段来搜索所有字符串资源,但我无法想象一个需要这样做的用例。
    • 实际上我在 strings.xml 文件中有 10 个字符串,我有 10 个 TextViews 来显示它们。我想允许用户搜索。根据他的查询,如果他的搜索与字符串中的单词匹配,我想突出显示 TextView 中的单词。怎么做?我只是需要一些提示。