Java oop:输入身份证号,将其出生年月提取转换成中文形式(详析哈希值等,有视频版)

// 提示用户输入一个身份证号,将其出生年月提取出来转换成中文大写形式,例如:
// 37083220000720189023
// 转换后的内容是
// 二零零零年七月二十日
// 如何将年月日拿出来?
版本一:
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,含头不含尾在第七个和第14个之间的都保留,date为20000720。
substring() 方法用于提取字符串中介于两个指定下标之间的字符。
语法:
stringObject.substring(start,stop),
参数描述:start:必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。
stop:可选。一个非负的整数,比要提取的子串的最后一个字符在 stringObject 中的位置多 1。
如果省略该参数,那么返回的子串会一直到字符串的结尾。
字符串截取,substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串.
substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串.
beginIndex - 起始索引(包括).从0开始
endIndex - 结束索引(不包括).
"unhappy".substring(2) returns "happy"
"hamburger".substring(4, 8) returns "urge"*/
//2.声明一个大写的数组
char[] c={'零','一','二','三','四','五','六','七','八','九'};
//3.将年截取出来
String year=date.substring(0,4);//2000
//声明一个StringBuilder来存储内容
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)这是一个String的截取字符串的方法,从第i个开始到i+1个。截取之后,转成int类型。c[]的下标=0,1,2,3c[0]='二',c[1]='零'*,c[2]='零'*,c[3]='零'*/
}
a.append("年");/*在二零零零末尾添加新的对象"年"*/
//截取月
String month=date.substring(4,6);/*20000720中保留07*/
//如果这个月份大于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)相当于substring(6,8),6,8都加1,含头不含尾,在第6个和第8个之间的都保留,8为尾数*/
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号的时候
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方法,按照以上案例调用时,会输出对象的哈希值。













}
}

版本二(老师版)
package a;
public class a {
public static void main(String[] args) {
// 提示用户输入一个身份证号,将其出生年月提取出来转换成大写形式,例如:
// 37083219991112189023
// 转换后的内容是
// 一九九九年十一月十二日
// 如何将年月日拿出来?
String str="37083219990627189023";//一九九九
//1.截取年月日
String date=str.substring(6,14);
//2.声明一个大写的数组
char[] cs={'零','一','二','三','四','五','六','七','八','九'};
//3.将年截取出来
String year=date.substring(0,4);//1999
//声明一个StringBuilder来存储内容
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);
//如果这个月份大于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号的时候
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());
}
}