JavaSE基础练习IO,字符串,循环
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner; /**
* 该题目为控制台应用程序;
* 在控制台输入IDCardNo.txt文件读取txt文件中的身份证号码(15位)数据;
* 按照【其他说明】中的身份证升位业务规则完成升位运算;
* 将最终的升位后的身份证号码(18位)列表写入到IDCardNo(年月日时分秒).txt文件中。
* @author macbookpro
*
*/
public class JavaSE001 { public static void main(String[] args) { System.out.println("请输入文件名称:");
Scanner scan = new Scanner(System.in);
//获取文件名称
String fileName = scan.nextLine();
System.out.println(fileName); readFile(fileName);
} public static void readFile(String fileName){
//读取文件
File cardFile = new File(fileName);
if (cardFile.exists()) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(cardFile));
String cardNo = null;
while ((cardNo = reader.readLine())!= null) {
System.out.println(cardNo);
//升级身份证
updateIDCard(cardNo);
}
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
reader.close();
for (int i = 0; i < oldIDCardList.size(); i++) {
System.out.println(oldIDCardList.get(i));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}else{
System.out.println("文件不存在");
}
}
/**
* 身份证升级
* @param oldIDCard
*/
public static void updateIDCard(String oldIDCard){
//第一步,在原十五位数身份证的第六位数后面插入19 ,这样身份证号码即为十七位数 StringBuilder IDBuilder1 = new StringBuilder(oldIDCard);
IDBuilder1.insert(5, 19);
String firstStr = IDBuilder1.toString(); //第二步,将身份证前十七位数分别乘以不同系数,从第一至十七位的系数分别为7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2,
// 将这十七位数字和系数相乘的结果相加,用加出来的和除以11,看看余数是多少
// 余数只可能有0、1、2、3、4、5、6、7、8、9、10这十一个数字,其分别对应的最后一位身份证的号码为1、0、X、9、8、7、6、5、4、3、2,
// 这样就得出了第二代身份证第十八位数的校验码。 StringBuilder IDBuilder2 = new StringBuilder(firstStr);
IDBuilder2.insert(17, subString(firstStr));
String secondStr = IDBuilder2.toString();
System.out.println("最终身份证号码是: "+secondStr);
}
/**
* 获取身份证第十八位
* @param str
*/
public static String subString(String str){
int numArray[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
int sum = 0;
for (int i = 0; i < str.length(); i++) {
char num1Str = str.charAt(i);
int num1 = num1Str - '0';
int num2 = numArray[i];
sum = num1*num2 + sum;
}
int num = sum%11;
System.out.println("余数是: "+ num);
switch (num) {
case 0:
return "1";
case 1:
return "0";
case 2:
return "X";
case 3:
return "9";
case 4:
return "8";
case 5:
return "7";
case 6:
return "6";
case 7:
return "5";
case 8:
return "4";
case 9:
return "3";
case 10:
return "2";
default:
return null;
}
} }
对txt文件里的数据用BufferedReader处理了,可以每次读取一行身份号码进行处理,还涉及到了字符串的解析。
JavaSE基础练习IO,字符串,循环的更多相关文章
- JavaSE基础:集合类
JavaSE基础:集合类 简单认识类集 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储. 而要向存储多个对象,就不能是 ...
- javaSE基础04
javaSE基础04 一.三木运算符 <表达式1> ? <表达式2> : <表达式3> "?"运算符的含义是: 先求表达式1的值, 如果为真, ...
- javase基础复习攻略《二》
今天就开始的真正走进JAVASE的世界,本篇介绍的是:JAVASE基础语法,大家如果有C语言的基础,对于本节内容一定感觉非常轻松,编程语言之间的都是相通的,只不过C语言属于面向过程编程,而JAVA语言 ...
- 基础1 JavaSe基础
JavaSe基础 1. 九种基本数据类型的大小,以及他们的封装类 boolean 无明确指定 Boolean char 16bits Character byte 8bits Byte short 1 ...
- javaSE基础03
javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...
- javaSE基础02
javaSE基础02 一.javac命令和java命令做什么事情? javac:负责编译,当执行javac时,会启动java的编译程序,对指定扩展名的.java文件进行编译,生成了jvm可以识别的字节 ...
- Java基础-处理json字符串解析案例
Java基础-处理json字符串解析案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 作为一名开发人员,想必大家或多或少都有接触到XML文件,XML全称为“extensible ...
- java学习之路之javaSE基础2
java学习之路之javaSE基础2 所有的代码都是引用他人写的. 1.逻辑运算符 //&,|,^,! //int x = 10; //5 < x < 15 //x > 5 ...
- java学习之路之javaSE基础1
<h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...
随机推荐
- spring mvc构建WEB应用程序入门例子
在使用spring mvc 构建web应用程序之前,需要了解spring mvc 的请求过程是怎样的,然后记录下如何搭建一个超简单的spring mvc例子. 1) spring mvc的请求经历 请 ...
- 利用例子来理解spring的面向切面编程
最近学习了spring的面向切面编程,在网上看到猴子偷桃的例子,觉得这种方式学习比书本上讲解有趣多了,也便于理解.现在就来基于猴子偷桃写个基本的例子. maven工程:
- [转] 常用SQL查询语句
sunada 的原文地址 常用SQL查询语句 一.简单查询语句 1. 查看表结构 SQL>DESC emp; 2. 查询所有列 SQL>SELECT * FROM emp; 3. 查询指 ...
- 邁向IT專家成功之路的三十則鐵律 鐵律二十六:IT人閱讀之道-慎選
IT人經常一整天工作回來早已用腦過度,此時收看什麼樣的電視節目,以及閱讀甚麼樣的書籍.聽什麼樣的音樂與有聲書最適合我們,讓我們可以在放鬆之餘,還能夠讓自己內在的心靈與外在的能力繼續成長呢? 身為IT工 ...
- 【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
导入项目之后,只显示项目文件,不显示项目结构 解决方法 1.点击file->project structure..->Modules 点击右上角+加号 ->import Module ...
- 【bootstrap】Bootstrap Notify的使用步骤
Bootstrap Notify说明文档:http://bootstrap-notify.remabledesigns.com/ Bootstrap Notify的GitHub地址:https://g ...
- Activiti 流程部署方式 activi 动态部署(高级源代码篇)
Activiti的流程 部署方式有非常多种方式,我们能够依据activit工作流引擎提供的ap方式进行部署. 当然了实际需求决定你要使用哪一种api操作,后面的总结具体介绍了使用场景. 以下看一下部署 ...
- C#文件路径操作总结【转】
http://www.cnblogs.com/zhoufoxcn/archive/2006/10/24/2515874.html 一.获取当前文件的路径 1. System.Diagnostics ...
- iOS UI08_tableView省市区字典数组
北京 1 北京市 1 西城区 1 东城区 2 崇文区 3 宣武区 4 朝阳区 5 丰台区 6 石景山区 7 海淀区 8 门头沟区 9 房山区 10 通州区 11 顺义区 12 昌平区 13 大兴区 1 ...
- Android手机需要安装任务管理软件吗?
使用android手机的用户可能都安装了任务管理的软件,使用android手机真的有必要安装结束任务的软件吗?大家在使用中也都发现了,很多软件在被结束后,马上就会又出现在任务列表里,或是稍等一会自己也 ...