簡體   English   中英

從字謎列表中刪除括號

[英]Removing brackets from list of anagrams

我在移除括號時遇到問題

public class Main {

    public static void main(String[] args) throws IOException {
        getAnagrams(new InputStreamReader(new URL("http://www.puzzlers.org/pub/wordlists/unixdict.txt").openStream(),
                StandardCharsets.UTF_8)).forEach(System.out::println);
    }

    private static String canonicalize(String string) {
        return Stream.of(string.split("")).sorted().collect(Collectors.joining());
    }

    public static List<Set<String>> getAnagrams(Reader rr) {
        Map<String, Set<String>> mapa = new BufferedReader(rr).lines().flatMap(Pattern.compile("\\W+")::splitAsStream)
                .collect(Collectors.groupingBy(Main::canonicalize, Collectors.toSet()));
        return mapa.values().stream().filter(lista -> lista.size() > 1).collect(Collectors.toList());
    }
}

輸出是

[倉鼠,阿默斯特]
[生殖器,明膠]

它應該是

倉鼠阿默斯特
生殖器明膠

您只需要打印出集合,就可以使用getAngarams()返回字符串集合列表,有很多方法可以獲取不帶括號的原始元素,其中一種可能是迭代器:

更換:

getAnagrams(new InputStreamReader(new URL("http://www.puzzlers.org/pub/wordlists/unixdict.txt").openStream(),
        StandardCharsets.UTF_8)).forEach(System.out::println);

有:

 getAnagrams(new InputStreamReader(new URL("http://www.puzzlers.org/pub/wordlists/unixdict.txt").openStream(),
            StandardCharsets.UTF_8)).iterator().forEachRemaining(x -> {for (String s : x) System.out.print(s + " ");
        System.out.println();});

這是因為forEach(System.out::println)調用Set calss中的toString()方法。

將此方法添加到您的班級

public static void println(Set<String> items) {
    for (String item : items) {
        System.out.print(item + " ");
    }
    System.out.println();
}

並將代碼forEach(System.out::println)替換為forEach(Main::println)


或使用此方法而不是添加新方法:

getAnagrams(new InputStreamReader(new URL("http://www.puzzlers.org/pub/wordlists/unixdict.txt").openStream(), StandardCharsets.UTF_8))
            .forEach(items -> {
                for (String item : items) {
                    System.out.print(item + " ");
                }
                System.out.println();
            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM