题目描述
输入一个英文句子,把句子中的单词(不区分大小写)按字典序在屏幕上输出来,要求能识别英文句号和逗号,即是说单词由空格、句号和逗号隔开。
输入描述:
输入有若干行,总计不超过1000个字符。
输出描述:
输出格式参见样例。
示例1
输入
复制
A blockhouse is a small castle that has four openings through which to shoot.
输出
复制
a:2
blockhouse:1
castle:1
four:1
has:1
is:1
openings:1
shoot:1
small:1
that:1
through:1
to:1
which:1
import java. util. *;
import java. io. *;
import java. text. *;
import java. math. *;
public class Main {
static int count;
public static void main ( String[ ] args) {
try {
BufferedReader br = new BufferedReader ( new InputStreamReader ( System. in) ) ;
String str;
while ( ( str = br. readLine ( ) ) != null) {
HashMap< String, Integer> map = new HashMap < > ( ) ;
String[ ] parts = str. split ( " |\\.|," ) ;
for ( int i = 0 ; i < parts. length; i++ ) {
char [ ] ch = parts[ i] . toCharArray ( ) ;
for ( int j = 0 ; j < ch. length; j++ ) {
if ( ch[ j] >= 'A' && ch[ j] <= 'Z' ) ch[ j] = ( char ) ( ch[ j] + 'a' - 'A' ) ;
}
parts[ i] = new String ( ch) ;
if ( ! map. containsKey ( parts[ i] ) ) map. put ( parts[ i] , 1 ) ;
else {
map. put ( parts[ i] , map. get ( parts[ i] ) + 1 ) ;
}
}
List< Map. Entry< String, Integer> > list = new ArrayList < Map. Entry< String, Integer> > ( map. entrySet ( ) ) ;
Collections. sort ( list, new Comparator < Map. Entry< String, Integer> > ( ) {
@Override
public int compare ( Map. Entry< String, Integer> o1, Map. Entry< String, Integer> o2) {
return o1. getKey ( ) . compareTo ( o2. getKey ( ) ) ;
}
} ) ;
for ( int i = 0 ; i < list. size ( ) ; i++ ) {
if ( ( list. get ( i) . getKey ( ) ) . length ( ) == 0 ) continue ;
System. out. println ( list. get ( i) . getKey ( ) + ":" + list. get ( i) . getValue ( ) ) ;
}
}
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
}