Java oop:輸入身份證號,將其出生年月提取轉(zhuǎn)換成中文形式(詳析哈希值等,有視頻版)

// 提示用戶輸入一個(gè)身份證號,將其出生年月提取出來轉(zhuǎn)換成中文大寫形式,例如:
// 37083220000720189023
// 轉(zhuǎn)換后的內(nèi)容是
// 二零零零年七月二十日
// 如何將年月日拿出來?
版本一:
package a;
public class a {
public static void main(String[] args) {
String str="37083220000720189023";
//1.截取年月日
String date=str.substring(6,14);/*20000720189023,(6,14)表示6和14都加1,含頭不含尾在第七個(gè)和第14個(gè)之間的都保留,date為20000720。
substring() 方法用于提取字符串中介于兩個(gè)指定下標(biāo)之間的字符。
語法:
stringObject.substring(start,stop),
參數(shù)描述:start:必需。一個(gè)非負(fù)的整數(shù),規(guī)定要提取的子串的第一個(gè)字符在 stringObject 中的位置。
stop:可選。一個(gè)非負(fù)的整數(shù),比要提取的子串的最后一個(gè)字符在 stringObject 中的位置多 1。
如果省略該參數(shù),那么返回的子串會(huì)一直到字符串的結(jié)尾。
字符串截取,substring(int beginIndex) 返回一個(gè)新的字符串,它是此字符串的一個(gè)子字符串.
substring(int beginIndex, int endIndex) 返回一個(gè)新字符串,它是此字符串的一個(gè)子字符串.
beginIndex - 起始索引(包括).從0開始
endIndex - 結(jié)束索引(不包括).
"unhappy".substring(2) returns "happy"
"hamburger".substring(4, 8) returns "urge"*/
//2.聲明一個(gè)大寫的數(shù)組
char[] c={'零','一','二','三','四','五','六','七','八','九'};
//3.將年截取出來
String year=date.substring(0,4);//2000
//聲明一個(gè)StringBuilder來存儲(chǔ)內(nèi)容
StringBuilder a=new StringBuilder();
for(int i=0;i<year.length();i++){
a.append(c[Integer.parseInt(year.substring(i,i+1))]);/*year.substring(i,i+1)這是一個(gè)String的截取字符串的方法,從第i個(gè)開始到i+1個(gè)。截取之后,轉(zhuǎn)成int類型。c[]的下標(biāo)=0,1,2,3c[0]='二',c[1]='零'*,c[2]='零'*,c[3]='零'*/
}
a.append("年");/*在二零零零末尾添加新的對象"年"*/
//截取月
String month=date.substring(4,6);/*20000720中保留07*/
//如果這個(gè)月份大于9月
if(Integer.parseInt(month)>9){
if(Integer.parseInt(month)==10){
a.append("十");
}else{
//做十一月和十二月
a.append("十");
a.append(c[Integer.parseInt(month.substring(1,2))]);/*07中保留7,c[7]='七'*/
}
}
else{
for(int i=0;i<month.length();i++){
a.append(c[Integer.parseInt(month.substring(i,i+1))]);
}
}
a.append("月");
//截取日
String day=date.substring(6);
/*20000720中保留20,substring(6)相當(dāng)于substring(6,8),6,8都加1,含頭不含尾,在第6個(gè)和第8個(gè)之間的都保留,8為尾數(shù)*/
if(Integer.parseInt(day)>9&&Integer.parseInt(day)<20){
//這里做10號到19號的
if(Integer.parseInt(day)==10){
a.append("十");
}else {
a.append("十");
a.append(c[Integer.parseInt(day.substring(1,2))]);
}
}else if(Integer.parseInt(day)>19&&Integer.parseInt(day)<30){
//這里做20號到29號的
if(Integer.parseInt(day)==20){
a.append("二十");
}else {
a.append("二十");
a.append(c[Integer.parseInt(day.substring(1,2))]);
}
}else if(Integer.parseInt(day)>29&&Integer.parseInt(day)<32){
//這里做30號到31號的
if(Integer.parseInt(day)==30){
a.append("三十");
}else {
a.append("三十");
a.append(c[Integer.parseInt(day.substring(1,2))]);
}
}else{
//小于10號的時(shí)候
for(int i=0;i<day.length();i++){
a.append(c[Integer.parseInt(day.substring(i,i+1))]);
}
}
a.append("日");
System.out.println(a.toString());/*如果類中沒有定義toString方法,按照以上案例調(diào)用時(shí),會(huì)輸出對象的哈希值。













}
}

版本二(老師版)
package a;
public class a {
public static void main(String[] args) {
// 提示用戶輸入一個(gè)身份證號,將其出生年月提取出來轉(zhuǎn)換成大寫形式,例如:
// 37083219991112189023
// 轉(zhuǎn)換后的內(nèi)容是
// 一九九九年十一月十二日
// 如何將年月日拿出來?
String str="37083219990627189023";//一九九九
//1.截取年月日
String date=str.substring(6,14);
//2.聲明一個(gè)大寫的數(shù)組
char[] cs={'零','一','二','三','四','五','六','七','八','九'};
//3.將年截取出來
String year=date.substring(0,4);//1999
//聲明一個(gè)StringBuilder來存儲(chǔ)內(nèi)容
StringBuilder sb1=new StringBuilder();
for(int i=0;i<year.length();i++){
sb1.append(cs[Integer.parseInt(year.substring(i,i+1))]);
}
sb1.append("年");
//截取月
String month=date.substring(4,6);
//如果這個(gè)月份大于9月
if(Integer.parseInt(month)>9){
if(Integer.parseInt(month)==10){
sb1.append("十");
}else{
//做十一月和十二月
sb1.append("十");
sb1.append(cs[Integer.parseInt(month.substring(1,2))]);
}
}else{
for(int i=0;i<month.length();i++){
sb1.append(cs[Integer.parseInt(month.substring(i,i+1))]);
}
}
sb1.append("月");
//截取日
String day=date.substring(6);
if(Integer.parseInt(day)>9&&Integer.parseInt(day)<20){
//這里做10號到19號的
if(Integer.parseInt(day)==10){
sb1.append("十");
}else {
sb1.append("十");
sb1.append(cs[Integer.parseInt(day.substring(1,2))]);
}
}else if(Integer.parseInt(day)>19&&Integer.parseInt(day)<30){
//這里做20號到29號的
if(Integer.parseInt(day)==20){
sb1.append("二十");
}else {
sb1.append("二十");
sb1.append(cs[Integer.parseInt(day.substring(1,2))]);
}
}else if(Integer.parseInt(day)>29&&Integer.parseInt(day)<32){
//這里做30號到31號的
if(Integer.parseInt(day)==30){
sb1.append("三十");
}else {
sb1.append("三十");
sb1.append(cs[Integer.parseInt(day.substring(1,2))]);
}
}else{
//小于10號的時(shí)候
for(int i=0;i<day.length();i++){
sb1.append(cs[Integer.parseInt(day.substring(i,i+1))]);
}
}
sb1.append("日");
System.out.println(sb1.toString());
}
}