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;}}}}
}

相关内容

热门资讯

中国旅游协会举办“开学第一课”... 本报北京电(记者赵珊)9月7日,中国旅游协会“开学第一课”系列公益宣讲活动启动仪式暨北京联合大学专场...
报告显示北京位列世界旅游城市综... 来源:新华社新华社北京9月9日电(记者杨淑君)9月9日,由世界旅游城市联合会主办的2026世界旅游合...
不求繁华喧嚣,只求一隅静谧,这... 在云南迪庆的群山深处,藏着一处被时光遗忘的人间秘境。它背靠巍峨圣洁的梅里雪山,隐匿在原始森林与冰川峡...
走过很多古城,唯独独克宗,藏着... 很多人奔赴香格里拉,满心满眼都是巍峨的雪山、澄澈的湖泊、治愈的草原,却常常忽略了这座城市最核心、最厚...
2026世界旅游合作与发展大会... 来源:环球网文旅频道【环球网文旅报道】9月9日,由世界旅游城市联合会主办、北京市文化和旅游局承办的2...