假如有以下email数据“[email protected],bb@ 163.com,[email protected],..”
现需要把email 中的用户部分和邮件地址部分分离,分离后以键值对应的方式放入HashMap
思路:我们要将Email的用户部分和邮件地址部分分离,分离后以键值对应的方式放入HashMap,要思考一下怎么将一整个字符变为aa souhu.com... 形式
[email protected],bb@ 163.com,[email protected] -> [email protected] bb@ 163.com [email protected] ->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 = "[email protected],bb@ 163.com,[email protected],..";
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);
}
}