3 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以使用正則表達(dá)式以更好的方式做到這一點(diǎn):
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貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
如果您想擁有新的和更好的 Java 功能以及一些優(yōu)雅、可讀和更少的代碼...您可以看看下面的代碼片段:
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字符串(不包含允許字符的字符串將在進(jìn)一步處理中被簡單地刪除),并且將比較剩余的長度(使用),最后將返回最長的有效String字符串。arraysfilterStreamComparatorString
可能存在一種情況,數(shù)組/流中的所有字符串都無效,在這種情況下,代碼將返回消息“No Such Value Found”作為字符串,但是您可以拋出異常,也可以返回一些自己的值對于您的自定義邏輯,或者您可以返回 null 等。
我特意保留了 String 消息,并為您提供了有關(guān)學(xué)習(xí) Java Stream 中其他方法的提示,以便您可以探索更多內(nèi)容。
繼續(xù)編碼...感受新 JAVA 的力量。:)

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
您進(jìn)行遞歸調(diào)用,但忽略返回值。
嘗試在遞歸查找字符串上添加返回。
arr = list.toArray(new String[0]);
return findstring("ABCD", arr);
添加回答
舉報(bào)