字符串的切分及其拓展

      假如有以下email数据“aa@sohu.com,bb@ 163.com,cc@sina.com,..”
 现需要把email 中的用户部分和邮件地址部分分离,分离后以键值对应的方式放入HashMap

思路:我们要将Email的用户部分和邮件地址部分分离,分离后以键值对应的方式放入HashMap,要思考一下怎么将一整个字符变为aa souhu.com... 形式
aa@sohu.com,bb@ 163.com,cc@sina.com -> aa@sohu.com bb@ 163.com cc@sina.com ->aa sohu.com bb 163.com...形式
需要将字符串变为字符数组,再将字符数组中的字符串,字符化,开始截取;最后对map集合进行遍历进行了

点击查看代码
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo6 {
    public static void main(String[] args) {
        String s = "aa@sohu.com,bb@ 163.com,cc@sina.com,..";
        HashMap<Object, Object> map = new HashMap<>();
        String[] s1 = s.split(",");
        for (String str : s1) {
//方法一:
            String name = null;
            String address = null;

            char[] chars = str.toCharArray();
            for (int i = 0; i < str.length(); i++) {
                if(chars[i]=='@'){
                    name = str.substring(0,i);
                    address = str.substring(i+1);
                    map.put(name,address);

方法二:
            String[] split = str.split("@");
            if (!str.equals("...")) {
                map.put(split[0], split[1]);
            }



                }
            }

        }
        Set<Map.Entry<Object, Object>> entries = map.entrySet();
        for (Map.Entry<Object, Object> entry : entries) {
            System.out.println(entry);
        }
    }
}

例题二”需求过长放入下面detail中“

//4.给定一个包含学生姓名和成绩的字符串数组 `students`,格式为“姓名-成绩”,例如:`["Alice-85", "Bob-90", "Charlie-78", "David-92", "Emma-88"]` 。使用 `TreeMap` 来存储学生的姓名和成绩,并实现以下功能:
//1. 按照成绩从高到低的顺序输出学生的姓名和成绩。
//2. 计算并输出平均成绩。
//3. 找出成绩最高的学生姓名和成绩。
//4. 找出成绩最低的学生姓名和成绩。
//
//示例输入
//["Alice-85", "Bob-90", "Charlie-78", "David-92", "Emma-88"]
//
//示例输出
//按照成绩从高到低的顺序:
//David - 92
//Bob - 90
//Emma - 88
//Alice - 85
//Charlie - 78
//平均成绩:86.2
//成绩最高的学生:David - 92
//成绩最低的学生:Charlie - 78

创建学生类

点击查看代码
package com.shujia.demotest;

public class Student implements Comparable<Student>{
    private String name;
    private int age;

    public Student() {

    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return
                name +
                "-" + age
                ;
    }

    @Override
    public int compareTo(Student o) {
        int i = o.getAge() - this.age;
        return (i==0)?o.getName().compareTo(this.name):i;
    }
}//需要重写compare to 方法,实现接口Comparable接口

测试类

点击查看代码
public class Demo2 {
    public static void main(String[] args) {
        TreeMap<String, Integer> map = new TreeMap<>();
        String[] students  = {"Alice-85","Bob-90","Charlie-78","David-92","Emma-88"};
        //TODO:如何将字符串拆分;先把他变成字符串数组,然后再把字符串数组里的字符串进行拆分,将字符串变为char类型
//        for (String student : students) {
//            String name = null;
//            String score = null;
//            char[] chars = student.toCharArray();
//            for (int i = 0; i < student.length(); i++) {
//                if(chars[i]=='-'){
//                    name = student.substring(0,i);
//                    score = student.substring(i+1);
//                    map.put(name,Integer.parseInt(score));
//                }
//            }
//        }
        for (String student : students) {
            String[] s1 = student.split("-");
            map.put(s1[0],Integer.parseInt(s1[1]));
            //根据规律新按照-进行前后拆分,形成了一个新的字符数组是【Alice,85】...   
        }
        sort(map);
        getAvg(map);
        getMax(map);
        getMin(map);

        }
        public static void sort(TreeMap<String, Integer> map){
        //需要通过TreeSet,无法对map直接进行排序
           TreeSet<Student> set = new TreeSet<>();
//            方法一:

//            Set<Map.Entry<String, Integer>> entries = map.entrySet();
//            for (Map.Entry<String, Integer> entry : entries) {
//                String name = entry.getKey();
//                Integer score = entry.getValue();
//                set.add(new Student(name,score));
//
//            }
//            for (Student student : set) {
//                System.out.println(student);
//            }


            //方法二:
            //TODO:通过map的建锁定map的值,通过调用map集合的get(),找到value
            //TODO:总体来说就是遍历map集合,把我们所需要的值塞到set集合
            for (String s : map.keySet()) {
                set.add(new Student(s,map.get(s)));
            }
            for (Student student : set) {

                System.out.println(student);
            }

        }
        public static void getAvg(TreeMap<String, Integer> map){

        int sum = 0;
        int i = 0;
            for (String s : map.keySet()) {
                sum+=map.get(s);
                i++;
            }
            System.out.println("平均成绩:"+sum/(i*1.0));
        }
        public  static void getMax(TreeMap<String, Integer> map){
        //TODO: 我们要确立一个flag(一个标识)让条件执行一次
        int flag = 0;
        int max = 0;
        String name = null;

            for (String s : map.keySet()) {
                if(flag==0){
                    max = map.get(s);
                    flag++;
                }
                else{
                    if(map.get(s)>max){
                        max = map.get(s);
                        name = s;
                    }
                }
            }
            System.out.println("成绩最高的学生:"+name+max);
        }
    public  static void getMin(TreeMap<String, Integer> map){
        int flag = 0;
        int min = 0;
        String name = null;

        for (String s : map.keySet()) {
            if(flag==0){
                min = map.get(s);
                flag++;
            }
            else{
                if(map.get(s)<min){
                    min = map.get(s);
                    name = s;
                }
            }
        }
        System.out.println("成绩最低的学生:"+name+min);
    }


    }

posted @ 2024-10-23 17:13  wang_jun  阅读(24)  评论(0)    收藏  举报