Java 蓝桥杯校赛 谁最长?

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("")){
    
                          //判断是否为空 若为空直接输出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;
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/joreng/article/details/127960106