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;
}
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 的力量。:)
TA贡献1848条经验 获得超6个赞
您进行递归调用,但忽略返回值。
尝试在递归查找字符串上添加返回。
arr = list.toArray(new String[0]);
return findstring("ABCD", arr);
添加回答
举报