Java 蓝桥杯校赛 谁最长?
admin
2024-02-04 14:45:52

Java 蓝桥杯校赛 谁最长?

    • 题目描述
    • 解题思路
    • 代码

题目描述

英语老师每天都会布置很多例句练习,并且让同学们找到例句中最长的单词进行背诵。

很多同学都懒得去数数,找出最长的单词。请你写一个程序,能够找出一个英文长句中最长的单词,并原样输出它。

如果发现一个句子中有多个单词的长度并列最长,则输出并列最长的单词们中从左向右找到的第一个。

而且,如果这个单词伴随标点符号,标点符号是在单词右侧表示句子结束的符号(除一对双引号和单引号外的符号),则该标点符号不计入单词长度。

比如:

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("")){                      //判断是否为空 若为空直接输出0System.out.print(0);}else {String []n=m.split(" ");     //若不为空按空格切分 int []x=new int[n.length];         //创建int类型数组 接收每个单词的长度for (int i=0;ichar [] 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;}}}}
}

相关内容

热门资讯

随笔|我把芫荽炒成菜 文|臧彦钧 馋人多半喜欢自己下厨。除了自己动手不用求人外,更多的是能在烹饪过程中自由发挥,抛开前人的...
4分钱的壳配3毛钱的肉?不少成... 对于热爱美食的当地人来说 在夜市或者美食街 都看到过这种“流量食物” ——蒜蓉粉丝烤扇贝 而且价格还...
全国首个以宋词为核心主题的演艺... 齐鲁晚报·齐鲁壹点 张浩穿越回李清照的时代与其展开时空对话,化身为玩家体验真实宋代生活……近日,在济...
“全球文旅轻创业计划”在京发布... 2025年11月17日上午,“银发文旅项目发布会暨全球文旅轻创业计划启动仪式”在中国传媒大学成功举办...
城事|办理口岸过百,台湾“首来... 据央视新闻消息,19日,国台办举行例行发布会,大陆持续释放旅游福利,首次来大陆的台胞“首来族”可获得...