如何在字符串数组中查找最大的字符串

我需要从字符串数组中找到最大的字符串,并且还想确保出现的字符串应仅包含在单独的字符串中定义的那些字符。


例如:如果一个字符串数组包含{"ABCAD","ABC","ABCFHG","AB"} 并且另一个字符串 S 包含 chars "ABCD"。


那么这里返回的最大字符串应该是,ABCAD因为它只包含 中定义的字符S。


public String findstring(String a, String[] arr)

{

    String s="";

    for(i=0; i<arr.length; i++)

    {

        //int m=0;


        if(arr[i].length() > s.length())

        {

            s = arr[i];


        }

    }


            for(j=0; j<s.length(); j++)                                                      

            {

                int m=0;

                for(k=0; k<a.length(); k++)

                {

                    if(m>0)

                    {

                        break;  

                    }

                    if((s.charAt(j)==a.charAt(k)))

                    {

                        m++;

                    }

                    else

                    {

                        continue;

                    }

                }

                if(m==0)

                {

                    List<String> list = new ArrayList<String>(Arrays.asList(arr));

                    list.remove(s);

                    arr = list.toArray(new String[0]);

                    findstring("ABCD", arr);

                }


            }

        return s;

}

}

我没有收到任何错误并获得最大的字符串,因为ABCFABCD需要F排除最大的字符串,而最大的字符串应该是ABCAA。它跳过所有检查,不知道为什么?


翻翻过去那场雪
浏览 136回答 3
3回答

忽然笑

您可以使用正则表达式以更好的方式做到这一点:public String findstring(final String a, final String[] arr) {&nbsp; &nbsp; String s = "";&nbsp; &nbsp; // Created pattern of the characters available in the String&nbsp; &nbsp; final Pattern p = Pattern.compile("^[" + a + "]*$");&nbsp; &nbsp; for (int i = 0; i < arr.length; i++) {&nbsp; &nbsp; &nbsp; if (p.matcher(arr[i]).matches()) {&nbsp; &nbsp; &nbsp; &nbsp; if ("".equals(s)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s = arr[i];&nbsp; &nbsp; &nbsp; &nbsp; } else if (arr[i].length() > s.length()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s = arr[i];&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return s;&nbsp; }

慕斯王

如果您想拥有新的和更好的 Java 功能以及一些优雅、可读和更少的代码...您可以看看下面的代码片段:public static void main(String args[]) {&nbsp; &nbsp; final String allowedChars = "ABCD";&nbsp; &nbsp; final char[] chars = allowedChars.toCharArray();&nbsp; &nbsp; String result&nbsp; = Stream.of("ABCAD","ABC","ABCFHG","AB")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(s ->{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(char c: chars){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(!s.contains(c+""))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .max(Comparator.comparingInt(String::length))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .orElse("No Such Value Found");&nbsp; &nbsp; System.out.println("Longes Valid String : " + result);}解释:该代码仅生成有效Stream字符串(不包含允许字符的字符串将在进一步处理中被简单地删除),并且将比较剩余的长度(使用),最后将返回最长的有效String字符串。arraysfilterStreamComparatorString可能存在一种情况,数组/流中的所有字符串都无效,在这种情况下,代码将返回消息“No Such Value Found”作为字符串,但是您可以抛出异常,也可以返回一些自己的值对于您的自定义逻辑,或者您可以返回 null 等。我特意保留了 String 消息,并为您提供了有关学习 Java Stream 中其他方法的提示,以便您可以探索更多内容。继续编码...感受新 JAVA 的力量。:)

慕勒3428872

您进行递归调用,但忽略返回值。尝试在递归查找字符串上添加返回。&nbsp; &nbsp;arr = list.toArray(new String[0]);&nbsp; &nbsp;return findstring("ABCD", arr);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java