題目描述
給定一個字串,計算有多少個單字在這個字串內。在這個題目中,一個單字為一個或多個英文字母。
原題網址
輸入格式
輸入一個長度不超過400000個字元的字串,這個字串可以使用以下的正規表示式來表示:
[A-Za-z !,?.\_'@]+
換句話說,字串只會包含英文字母、空格和一些符號「!,?._'@」。
輸出格式
第一行輸出字串內單字的數量N,單字允許重複。接下來的N行,依序將所有找到的單字輸出。
範例輸入
He is a very very good boy, isn't he?
範例輸出
10
He
is
a
very
very
good
boy
isn
t
he
He
is
a
very
very
good
boy
isn
t
he
解題概念
一個單字只由英文字母組成,因此可以寫出以下的正規表示式:
"[A-Za-z]+"
利用Java提供的Pattern物件和Matcher物件,即可在一個字串中找到所有符合上面正規表示式的段落。由於我們需要輸出每個單字,需要知道找到的段落是哪個字串,所以將正規表示式加上括號:
"([A-Za-z]+)"
如此一來就可以使用Matcher物件的find方法來尋找單字,用group方法來取得單字。
參考答案
import java.util.ArrayList;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
public static void main(final String[] args) {
final Scanner scan = new Scanner(System.in);
final String s = scan.nextLine();
final Pattern pattern = Pattern.compile("([A-Za-z]+)");
final Matcher matcher = pattern.matcher(s);
final ArrayList<String> wordsList = new ArrayList<>();
while (matcher.find()) {
wordsList.add(matcher.group(1));
}
System.out.println(wordsList.size());
wordsList.forEach(System.out::println);
}
}