Java编程:有一个字符串,将所有的单词找出,并确定单词的个数。将单词和单词个数放入对象MyWord,将所有的MyWord对象存入数组.分别按照单词个数和单词从小到大排序。

有一个字符串hello4422world23haha2bingbing54xiaokun33hello82788hello333333world67890xiaokun8838383838hello88877haha

要求:
1.将所有的单词找出,并确定每个单词的个数
2.将单词和单词个数放入对象MyWord,将所有的MyWord对象存入数组.
3.分别按照单词个数和单词从小到大排序(使用匿名内部类和lambda表达式)

分析使用的知识点:
字符串
正则表达式
( 正则表达式:通过设定规则,用来对字符串进行规则下的操作(切割,替换,取字串,匹配)

    + 一个或多个
    \d 表示数字
    \d+ 表示一个或多个数字)

接口
匿名内部类
lambda表达式
常用类
代码实现:

package com.cr.instance;

import java.util.Arrays;

/*
有一个字符串hello4422world23haha2bingbing54xiaokun33hello82788hello333333world67890xiaokun8838383838hello88877haha

要求:
1.将所有的单词找出,并确定每个单词的个数
2.将单词和单词个数放入对象MyWord,将所有的MyWord对象存入数组.
3.分别按照单词个数和单词从小到大排序(使用匿名内部类和lambda表达式)

使用的知识点:
字符串
正则表达式
接口
匿名内部类
lambda表达式
常用类
 */
public class Instance02 {
    //1.将所有的单词找出,并确定每个单词的个数
    public static void main(String[] args) {
        MyWord[] myWords = getWords();
        //创建比较器对象
        //使用匿名子类对象
        //根据单词的个数比较
        MyComparator myComparator = new MyComparator() {
            @Override
            public int compara(MyWord m1, MyWord m2) {
                return m1.number-m2.number;
            }
        };
        queue(myWords,myComparator);
        System.out.println(Arrays.toString(myWords));

        //根据单词的长短比较
        queue(myWords, new MyComparator() {
            @Override
            public int compara(MyWord m1, MyWord m2) {
                return m1.word.length()-m2.word.length();
            }
        });
        System.out.println(Arrays.toString(myWords));

        //使用lambda表达式
        queue(myWords,((m1, m2) -> m1.number-m2.number));

    }
    //2.将单词和单词个数放入对象MyWord,将所有的MyWord对象存入数组.
    public static MyWord[] getWords(){
        String string = "hello4422world23haha2bingbing54xiaokun33hello82788hello333333world67890xiaokun8838383838hello88877haha";
        //切割
        //选刀
        /*
        正则表达式:通过设定规则,用来对字符串进行规则下的操作(切割,替换,取字串,匹配)
        现在要作为刀的是 4422   23  2   54  等
        + 一个或多个
        \d 表示数字
        \d+ 表示一个或多个数字
         */
        String[] words = string.split("\\d+");
        System.out.println(Arrays.toString(words));
        //先排序-默认排序,字典排序
        Arrays.sort(words);
        System.out.println(Arrays.toString(words));
        //设定临时变量,存储临时字符串----工作字符串
        String temp = words[0];
        //临时的单词隔宿计数器
        int num = 0;

        //创建数组,存放MyWords对象
        MyWord[] myWords = new MyWord[words.length];
        //设定计数器,表示数组的下标
        int newNum = 0;
        int i = 0;
        for (;i < words.length;i++){
            if (temp.equals(words[i])){
                num++;
            }else{
                //遍历结束的单词以及个数存入Myword对象
                MyWord myWord = new MyWord(temp,num);

                //将MyWord对象放入数组
                myWords[newNum] = myWord;
                newNum++;

                //temp需要指向下一个元素
                temp = words[i];
                //num需要重置成0
                num = 0;

                //保证每一个分组中的第一个单词也记录到num中
                i--;
            }
            //手动将最后一组数放入数组
            if (words.length-1 == i){
                MyWord myWord = new MyWord(temp,num);
                myWords[newNum] = myWord;
            }
        }
        return Arrays.copyOf(myWords,newNum+1);
    }
    static class MyWord{
        private String word;
        private int number;

        public MyWord(){}

        public MyWord(String word, int number) {
            this.word = word;
            this.number = number;
        }

        public String getWord() {
            return word;
        }

        public void setWord(String word) {
            this.word = word;
        }

        public int getNumber() {
            return number;
        }

        public void setNumber(int number) {
            this.number = number;
        }

        @Override
        public String toString() {
            return "MyWord{" +
                    "word='" + word + '\'' +
                    ", number=" + number +
                    '}';
        }
    }
    //3.分别按照单词个数和单词从小到大排序(使用匿名内部类和lambda表达式)
    public static void queue(MyWord[] myWords,MyComparator comparator){
        for (int i=0;i<myWords.length-1;i++) {
            for (int j=1;j<myWords.length-1-i;j++){
                if (comparator.compara(myWords[j],myWords[j+1])>0){
                    MyWord myWord = myWords[j];
                    myWords[j]= myWords[j+1];
                    myWords[j+1] = myWord;
                }
            }
        }
    }
    interface MyComparator{
        int compara(MyWord m1,MyWord m2);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChlinRei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值