英语老师每天都会布置很多例句练习,并且让同学们找到例句中最长的单词进行背诵。
很多同学都懒得去数数,找出最长的单词。请你写一个程序,能够找出一个英文长句中最长的单词,并原样输出它。
如果发现一个句子中有多个单词的长度并列最长,则输出并列最长的单词们中从左向右找到的第一个。
而且,如果这个单词伴随标点符号,标点符号是在单词右侧表示句子结束的符号(除一对双引号和单引号外的符号),则该标点符号不计入单词长度。
比如:
Jackson’s hat is red.中,Jackson’s的单引号是在单词中间,表示所有格,这是一个完整的表述,因此Jackson’s看做一个单词,长度是9。
Jenny holds a broom.中,Jenny和broom长度一样,选择Jenny输出为结果。broom后的英文句号此时不计入单词长度。
Tim has a ‘wonderful’ headphone.中,wonderful和headphone都是9个字母,但是wonderful被两个单引号或双引号包含,则最长的单词是’wonderful’,单引号计入长度,长度为11。
但如果是’Good idea’, Tom says.这样,用单引号或双引号包含的多个单词,则该单引号或双引号不计入单词长度,该句子输出Good
更多例子:
Margaret’s toy is a pretty doll ➞ Margaret’s
A thing of beauty is a joy forever. ➞ forever
Forgetfulness is by all means powerless! ➞ Forgetfulness
主要考察的就是 模拟判断 由题可以分析出需要考虑的条件有:
1.在单个单词中的 ’ 表示所有格 可以看作为一个字符。
2.若长度相同的单词有多个则输出最先出现的单词。
3.若单个单词被’ '或" "包含 则也算作单词的长度。
4.若单个单词只有左边或者右边含有 ’ 或者 " 则删除对应的 '或"。
5.而在单词右侧的标点符号如: ,和 . 以及!和?不计入单词长度 也应删除。
具体思路:
1.由于是直接输入一串字符所以用String类型m来接收。
2.用split函数按照空格来切分放入String数组n中。
3.建立一个int数组x来存储每个单词的长度(在这之前要先经过上面的条件判断和调整),并用Arrays.sort(x)进行升序排列
4.再次循环输出n中每个字符串的长度直到有字符的长度等于n[n.length-1].结束循环输出该字符串。
注意事项:
由于字符类型需要用’ '包含所以单引号的判断需要使用到转义字符 \ ,eg:‘\’'才表示选取到了单引号。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String m=scanner.nextLine(); //接收字符串
if (m.equals("")){ //判断是否为空 若为空直接输出0
System.out.print(0);
}else {
String []n=m.split(" "); //若不为空按空格切分
int []x=new int[n.length]; //创建int类型数组 接收每个单词的长度
for (int i=0;i<n.length;i++){
char [] ch=n[i].toCharArray(); //把每个字符串转为字符数组依次判断
n[i]=n[i].replace(",",""); //删除无效的字符
n[i]=n[i].replace(".","");
if (ch[ch.length-1]=='?'){
n[i]=n[i].replace("?","");
}else if (ch[ch.length-1]=='!'){
n[i]=n[i].replace("!","");
}
for (char c : ch) { //判断单词是否被' '或" "包含
if (c == '\'') {
if (ch[ch.length - 1] != '\'')
n[i]=n[i].replace("'",""); //删除单个 单引号
break;
} else {
if (ch[ch.length - 1] == '\'')
n[i]=n[i].replace("'","");
break;
}
}
x[i] = n[i].length(); //得到最后的单词长度 加入到整形数组
}
Arrays.sort(x); //升序排列
int y=x[x.length-1]; //最长单词的长度
for (String s : n) { //依次判断 得到最长的输出 并结束循环
if (y == s.length()) {
System.out.print(s);
break;
}
}
}
}
}