为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

翻翻过去那场雪 2023-07-19 17:04:04
我需要从字符串数组中找到最大的字符串,并且还想确保出现的字符串应仅包含在单独的字符串中定义的那些字符。例如:如果一个字符串数组包含{"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。它跳过所有检查,不知道为什么?
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

您可以使用正则表达式以更好的方式做到这一点:


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

    String s = "";

    // Created pattern of the characters available in the String

    final Pattern p = Pattern.compile("^[" + a + "]*$");


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


      if (p.matcher(arr[i]).matches()) {


        if ("".equals(s)) {

          s = arr[i];

        } else if (arr[i].length() > s.length()) {

          s = arr[i];

        }

      }


    }


    return s;

  }


查看完整回答
反对 回复 2023-07-19
?
慕斯王

TA贡献1864条经验 获得超2个赞

如果您想拥有新的和更好的 Java 功能以及一些优雅、可读和更少的代码...您可以看看下面的代码片段:


public static void main(String args[]) {

    final String allowedChars = "ABCD";

    final char[] chars = allowedChars.toCharArray();

    String result  = Stream.of("ABCAD","ABC","ABCFHG","AB")

            .filter(s ->{

                for(char c: chars){

                    if(!s.contains(c+""))

                        return false;

                }

                return true;

            })

            .max(Comparator.comparingInt(String::length))

            .orElse("No Such Value Found");

    System.out.println("Longes Valid String : " + result);

}

解释:


该代码仅生成有效Stream字符串(不包含允许字符的字符串将在进一步处理中被简单地删除),并且将比较剩余的长度(使用),最后将返回最长的有效String字符串。arraysfilterStreamComparatorString


可能存在一种情况,数组/流中的所有字符串都无效,在这种情况下,代码将返回消息“No Such Value Found”作为字符串,但是您可以抛出异常,也可以返回一些自己的值对于您的自定义逻辑,或者您可以返回 null 等。


我特意保留了 String 消息,并为您提供了有关学习 Java Stream 中其他方法的提示,以便您可以探索更多内容。


继续编码...感受新 JAVA 的力量。:)


查看完整回答
反对 回复 2023-07-19
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

您进行递归调用,但忽略返回值。


尝试在递归查找字符串上添加返回。


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

   return findstring("ABCD", arr);


查看完整回答
反对 回复 2023-07-19
  • 3 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信