第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何編寫java程序只打印字符串中的重復(fù)字符?

如何編寫java程序只打印字符串中的重復(fù)字符?

動漫人物 2023-08-23 14:38:41
我想僅使用集合(Set)打印字符串中的重復(fù)字符。我已經(jīng)編寫了代碼,但如果字符串是“ashish”,它將顯示正確的結(jié)果,但如果字符串是“ashish java”,則會顯示失敗,因為字符“a”出現(xiàn)了三次。public class DuplicateStringMethod {    public static void duplicateString(String str) {        char[] cArray = str.toCharArray();        Set<Character> set = new HashSet<Character>();        for(char c:cArray) {            if(set.add(c)==false) {                System.out.println(c);            }        }    }    public static void main(String[] args) {        duplicateString("Java ashishj ");    }}它將打印a a s h。但我a s h只想使用Set界面。
查看完整描述

4 回答

?
鳳凰求蠱

TA貢獻1825條經(jīng)驗 獲得超4個贊

再使用一組來存儲重復(fù)元素并打印該元素。嘗試這樣:


public static void duplicateString(String str) {

        str=str.replaceAll(" ","");

        char[] cArray = str.toCharArray();

        Set<Character> set = new HashSet<Character>();

        Set<Character> set1 = new HashSet<Character>();

        for(char c:cArray) {

            if(set.add(c)==false) {

                if(set1.add(c) == true)

                    System.out.println(c);

            }

        }

    }


查看完整回答
反對 回復(fù) 2023-08-23
?
猛跑小豬

TA貢獻1858條經(jīng)驗 獲得超8個贊

我并不完全清楚“僅使用接口”需要什么,Set但我假設(shè)這意味著重復(fù)的字符將在Set. 有幾種方法可以做到這一點。第一個是對輸入字符串的字符進行直接循環(huán)。它利用了以下功能:如果集合被修改,則Set.add返回;如果沒有,則返回;這意味著返回的操作是重復(fù)的。truefalseaddfalse


static Set<Character> dups0(String input) {

    Set<Character> dups = new HashSet<>();

    Set<Character> seen = new HashSet<>();

    for (char ch : input.toCharArray()) {

        if (! seen.add(ch)) {

            dups.add(ch);

        }

    }

    return dups;

}

有一種流式的方式可以做到這一點,本質(zhì)上與流形式表達的東西是一樣的:


static Set<Character> dups1(String input) {

     Set<Character> seen = new HashSet<>();

     return input.chars()

                 .mapToObj(ch -> (char)ch)

                 .filter(ch -> !seen.add(ch))

                 .collect(toSet());

}

有些人可能會覺得這令人討厭,因為它的過濾操作會產(chǎn)生副作用。此外,如果并行運行,結(jié)果將需要類似于ConcurrentHashMap.newKeySet.


另一種方法是生成字符頻率表并刪除僅出現(xiàn)一次的所有條目:


static Set<Character> dups2(String input) {

     Map<Character, Long> map = input.chars()

                                     .mapToObj(i -> (char)i)

                                     .collect(groupingBy(ch -> ch, HashMap::new, counting()));

     map.values().removeIf(v -> v == 1);

     return map.keySet();

}

請注意,這在映射的值集合視圖上使用集合批量突變操作。為了確保映射是可變的,我使用了三參數(shù)重載groupingBy來指定映射的實現(xiàn)類型。


如果你不喜歡突變,有一個純流的方法可以做到這一點:


static Set<Character> dups3(String input) {

    Map<Character, Long> map = input.chars()

                                    .mapToObj(i -> (char)i)

                                    .collect(groupingBy(ch -> ch, counting()));

    return map.entrySet().stream()

              .filter(entry -> entry.getValue() > 1)

              .map(Map.Entry::getKey)

              .collect(toSet());

}


查看完整回答
反對 回復(fù) 2023-08-23
?
隔江千里

TA貢獻1906條經(jīng)驗 獲得超10個贊

嘗試一下:


public static void duplicateString(String str) {

? ? Set<Character> firstTime = new HashSet<Character>();

? ? Set<Character> reported = new HashSet<Character>();


? ? char[] cArray = str.toCharArray();

? ? for(char c:cArray) {

? ? ? ? if (!firstTime.contains(c)) {

? ? ? ? ? firstTime.add(c);

? ? ? ? ? continue;

? ? ? ? }

? ? ? ? if (reported.contains(c)) { continue; }

? ? ? ? reported.add(c);

? ? ? ? System.out.println(c);

? ? }

}

我進行了一些測試:


添加:10000000 次操作需要 52443260ns

包含:10000000 次操作需要 28209745ns

因此上面的代碼雖然不短但速度最快。


查看完整回答
反對 回復(fù) 2023-08-23
?
至尊寶的傳說

TA貢獻1789條經(jīng)驗 獲得超10個贊

檢查這個程序


public static void duplicateString(String str) {


        char[] cArray = str.replaceAll("\\s+", "").toCharArray();


        Set<Character> set = new HashSet<Character>();

        Set<Character> alreadyExistingSet = new HashSet<Character>();


        for (char c : cArray) {

            if (set.add(c) == false && alreadyExistingSet.add(c) == true) {

                System.out.print(c);

            }

        }

    }


查看完整回答
反對 回復(fù) 2023-08-23
  • 4 回答
  • 0 關(guān)注
  • 291 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號