如何使用數組在用戶輸入字符串時創建程序,它會檢查多少字有x個字母,然後打印總字數。例如,如果用戶輸入:Java計數編號總字數及其字符長度
用戶539537克被coolio8fsd
的字的數量爲6:「該」,「用戶」,「G」,「是「,」coolio「,」fsd「。該程序認爲任何非字母都是分隔符,這將是數字,符號和空格。
因此,該程序應該輸出:
這串共有6個字。
一個1字母的單詞
一個兩字母字
兩個3個字母的單詞
一個4個字母的單詞
一個6個字母的單詞
如何使用數組在用戶輸入字符串時創建程序,它會檢查多少字有x個字母,然後打印總字數。例如,如果用戶輸入:Java計數編號總字數及其字符長度
用戶539537克被coolio8fsd
的字的數量爲6:「該」,「用戶」,「G」,「是「,」coolio「,」fsd「。該程序認爲任何非字母都是分隔符,這將是數字,符號和空格。
因此,該程序應該輸出:
這串共有6個字。
一個1字母的單詞
一個兩字母字
兩個3個字母的單詞
一個4個字母的單詞
一個6個字母的單詞
您可以使用帶正則表達式的字符串拆分方法將字符串拆分爲字串數組(字符串),然後co解決具有指定長度的字符串問題。
// This regex finds all sequences of whitespace and numerical digits
s.split("\\s*[^A-z]\\s*|[\\s]+");
流將在這裏工作。
// I'm assuming you can get the input from somewhere
// maybe a scanner
String input = "The user 539537g is coolio8fsd";
// Split on any non-letter
String[] words = input.split("[^A-z]");
Map<Long, Long> wordCounts =
Arrays.stream(words) // Stream the words
.filter(s -> !s.isEmpty()) // Filter out the empty ones
.map(String::length) // Map each string to its length
.collect(Collectors.groupingBy(i->i, Collectors.counting()); // Create a map with length as key and count as value
System.out.println("There are " + wordCounts.size() + " words.");
wordCounts.forEach((k,v) -> System.out.println(v + " " + k + "-letter words"));
我確實設法在一行中做到這一點,但可讀性降低了。這似乎是一個很好的平衡。
輸出可以是「2個3個字母的單詞」嗎? – bradimus
如果您想要這種輸出,請考慮所有數字名稱的大圖。否則,您可以將@bradimus問題作爲一個建議,例如,如果使用「字符串」來表示外觀編號,則應該使用「整數」。 –