MyDate类、新的字符串split方法(JAVA)

2021.05.10上机
题目描述
在这里插入图片描述
MyDate类思路
简单的类的实现。
获取当前时间

GregorianCalendar date = new GregorianCalendar();
year = date.get(Calendar.YEAR);
month = date.get(Calendar.MONTH);
day = date.get(Calendar.DAY_OF_MONTH);
hour = date.get(Calendar.HOUR_OF_DAY);
min = date.get(Calendar.MINUTE);
sec = date.get(Calendar.SECOND);

获取从1970年1月1日午夜开始流逝的毫秒数对应的时间

GregorianCalendar date = new GregorianCalendar();
date.setTimeInMillis(elapsedTime);
year = date.get(Calendar.YEAR);
month = date.get(Calendar.MONTH);
day = date.get(Calendar.DAY_OF_MONTH);
hour = date.get(Calendar.HOUR_OF_DAY);
min = date.get(Calendar.MINUTE);
ec = date.get(Calendar.SECOND);

MyDate类代码

package Practice;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class Ch10Q14 {
    public static void main(String[] args) {
        MyDate date1 = new MyDate();
        System.out.print("year: " + date1.getYear()+' ');
        System.out.print("month: " + date1.getMonth()+' ');
        System.out.print("day: " + date1.getDay()+' ');
        System.out.print("hour: " + date1.getHour()+' ');
        System.out.print("min: " + date1.getMin()+' ');
        System.out.println("sec: " + date1.getSec()+' ');

        MyDate date2 = new MyDate(2147483648000L);
        System.out.print("year: " + date2.getYear()+' ');
        System.out.print("month: " + date2.getMonth()+' ');
        System.out.print("day: " + date2.getDay()+' ');
        System.out.print("hour: " + date2.getHour()+' ');
        System.out.print("min: " + date2.getMin()+' ');
        System.out.println("sec: " + date2.getSec()+' ');

        MyDate date3 = new MyDate(561555550000L);
        System.out.print("year: " + date3.getYear()+' ');
        System.out.print("month: " + date3.getMonth()+' ');
        System.out.print("day: " + date3.getDay()+' ');
        System.out.print("hour: " + date3.getHour()+' ');
        System.out.print("min: " + date3.getMin()+' ');
        System.out.println("sec: " + date3.getSec()+' ');

    }
}

class MyDate {
    private int year;
    private int month;
    private int day;
    private int hour;
    private int min;
    private int sec;

    MyDate() {
        GregorianCalendar date = new GregorianCalendar();
        year = date.get(Calendar.YEAR);
        month = date.get(Calendar.MONTH);
        day = date.get(Calendar.DAY_OF_MONTH);
        hour = date.get(Calendar.HOUR_OF_DAY);
        min = date.get(Calendar.MINUTE);
        sec = date.get(Calendar.SECOND);
    }

    MyDate(long elapsedTime) {
        GregorianCalendar date = new GregorianCalendar();
        date.setTimeInMillis(elapsedTime);
        year = date.get(Calendar.YEAR);
        month = date.get(Calendar.MONTH);
        day = date.get(Calendar.DAY_OF_MONTH);
        hour = date.get(Calendar.HOUR_OF_DAY);
        min = date.get(Calendar.MINUTE);
        sec = date.get(Calendar.SECOND);
    }

    MyDate(int year, int month, int day, int hour, int min, int sec) {
        this.year = year;
        this.month = month;
        this.day = day;
        this.hour=hour;
        this.min=min;
        this.sec=sec;
    }

    public int getYear() {
        return year;
    }

    public int getMonth() {
        return month;
    }

    public int getDay() {
        return day;
    }

    public int getHour() {
        return hour;
    }

    public int getMin() {
        return min;
    }

    public int getSec() {
        return sec;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public void setHour(int hour) {
        this.hour = hour;
    }

    public void setMin(int min) {
        this.min = min;
    }

    public void setSec(int sec) {
        this.day = sec;
    }

}

效果图
在这里插入图片描述

新的字符串split方法思路:
首先判断regex类型,即是多字母匹配([xxx])还是单字母匹配。
由于不知道split后有多少词数,这里用的队列,逐渐将split后的单词加入该队列,而后统一输出。
具体过程为:遍历字符串s,判断每个字母是否在regex中存在,若存在则将tmp以及当前字母移入队列,然后tmp重置为空字符串;若不存在则将当前字母加进tmp。
其中,将tmp加入队列时需要特判,若tmp不为空字符串才加入。避免开头或中间加入多个空格。
新的字符串split方法

package Practice;

import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ConcurrentLinkedDeque;

public class Ch05Q25 {
    public static void main(String[] args){
        String s1 = "ab#12#453#";
        String s2 = "#ab#12#453#";
        String s3 = "###";
        String s4 = "ab?#12?453#?";
        String[] s11 = split(s1,"#");
        String[] s22 = split(s2,"#");
        String[] s33 = split(s3,"#");
        String[] s44 = split(s4,"[?#]");
        System.out.println("s: " + s1 + "   regex: "+"#");
        for(int i = 0;i<s11.length;i++){
            System.out.print(s11[i]+" ");
        }
        System.out.println("");
        System.out.println("s: " + s2 + "   regex: "+"#");
        for(int i = 0;i<s22.length;i++){
            System.out.print(s22[i]+" ");
        }
        System.out.println("");
        System.out.println("s: " + s3 + "   regex: "+"#");
        for(int i = 0;i<s33.length;i++){
            System.out.print(s33[i]+" ");
        }
        System.out.println("");
        System.out.println("s: " + s4 + "   regex: " + "[?#]");
        for(int i = 0;i<s44.length;i++){
            System.out.print(s44[i]+" ");
        }
    }

    public static String[] split(String s, String regex){
        Queue<String> queue = new ConcurrentLinkedDeque();
        // regex为多字母
        if(regex.charAt(0)=='['&&regex.charAt(regex.length()-1)==']'){
            String newRegex = "";
            for(int i=1;i<regex.length()-1;i++){
                newRegex+=regex.charAt(i);
            }

            String temp = "";
            // 遍历字符串s
            for(int j = 0; j < s.length(); j ++){
                if(newRegex.contains(Character.toString(s.charAt(j)))){// 若与regex中某字母匹配
                    if(temp != "") queue.offer(temp);
                    queue.offer(Character.toString(s.charAt(j)));
                    temp = "";
                }else{ // 若不匹配
                    temp+=s.charAt(j);
                }
            }
        }else { // regex为单字母
            String temp = "";
            for (int j = 0; j < s.length(); j++) {
                if (Character.toString(s.charAt(j)).equals(regex)) {// 若与regex匹配
                    if(temp != "") queue.offer(temp);
                    queue.offer(Character.toString(s.charAt(j)));
                    temp = "";
                } else {
                    temp += s.charAt(j);
                }
            }
        }
        int length = queue.size();
        String[] result = new String[queue.size()];
        for(int i=0;i<length;i++){
            result[i] = queue.poll();
        }
        return result;
    }
}

效果图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值