我試圖找出是否有相同數量的出現"dog"和“貓”在給定的String.
true如果它們相等,它應該回傳,false否則。我怎樣才能在沒有 while等for回圈的情況下找到這個?
這是我目前的流程
class Main {
public static boolean catsDogs(String s) {
String cat = "cat";
String dog = "dog";
if (s.contains(cat) && s.contains(dog)) {
return true;
}
return false;
}
public static void main(String[] args) {
boolean r = catsDogs("catdog");
System.out.println(r); // => true
System.out.println(catsDogs("catcat")); // => false
System.out.println(catsDogs("1cat1cadodog")); // => true
}
}
uj5u.com熱心網友回復:
使用 java9 ,正則運算式匹配器有一個計數方法:
public static boolean catsDogs(String s) {
Pattern pCat = Pattern.compile("cat");
Pattern pDog = Pattern.compile("dog");
Matcher mCat = pCat.matcher(s);
Matcher mDog = pDog.matcher(s);
return (mCat.results().count() == mDog.results().count());
}
uj5u.com熱心網友回復:
您可以通過替換字串來使用以下示例(以防您不希望放置拆分):
public static boolean catsDogs(String s) {
return count(s,"cat") == count(s,"dog");
}
public static int count(String s, String catOrDog) {
return (s.length() - s.replace(catOrDog, "").length()) / catOrDog.length();
}
public static void main(String[] args) {
boolean r = catsDogs("catdog");
System.out.println(r); // => true
System.out.println(catsDogs("catcat")); // => false
System.out.println(catsDogs("1cat1cadodog")); // => true
}
uj5u.com熱心網友回復:
這是幾個基于 Java 9 的單行解決方案,Matcher.result()它們生成MatchResult對應于給定字串中每個匹配子序列的流。
我們還可以通過提供一對正則運算式作為引數而不是硬編碼它們來使這種方法更加通用。
teeing() summingInt()
我們可以MatchResesult通過生成匹配組將流變成字串流。并使用收集器收集資料,該收集器teeing()期望兩個下游收集器和一個根據每個收集器回傳的值產生結果的函式作為其引數。
public static boolean hasSameFrequency(String str,
String regex1,
String regex2) {
return Pattern.compile(regex1 "|" regex2).matcher(str).results()
.map(MatchResult::group)
.collect(Collectors.teeing(
Collectors.summingInt(group -> group.matches(regex1) ? 1 : 0),
Collectors.summingInt(group -> group.matches(regex2) ? 1 : 0),
Objects::equals
));
}
collectAndThen() partitioningBy()
同樣,我們可以使用收集器collectingAndThen()和partitioningBy().
與上面介紹的方法相比,這種方法的缺點是將partitioningBy()流元素具體化為映射的值(同時我們只對它們的數量感興趣),但它執行的比較較少。
public static boolean hasSameFrequency(String str,
String regex1,
String regex2) {
return Pattern.compile(regex1 "|" regex2).matcher(str).results()
.map(MatchResult::group)
.collect(Collectors.collectingAndThen(
Collectors.partitioningBy(group -> group.matches(regex1)),
map -> map.get(true).size() == map.get(false).size()
));
}
uj5u.com熱心網友回復:
這就是我為我的游戲王所做的!專案。我有一個卡片組(卡片串列),每張卡片都有一個字串名稱。我最多只能擁有 3 張卡片。檢查我是否使用了卡片名稱和出現次數之間的映射。你也許可以使用和修改需要的東西(你的字串而不是甲板......)。還要檢查流介面。
//count each card occurrences
Map<String,Long> occurrenceMap =deck.stream().collect(Collectors.groupingBy(card -> card.getName(),Collectors.counting()));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/527920.html
標籤:爪哇细绳相比
