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)=='['&®ex.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;
}
}
效果图