JavaSE基础练习001_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处理了,可以每次读取一行身份号码进行处理,还涉及到了字符串的解析。

时间: 2024-10-10 16:38:54

JavaSE基础练习001_IO,字符串,循环的相关文章

javase基础复习攻略《二》

今天就开始的真正走进JAVASE的世界,本篇介绍的是:JAVASE基础语法,大家如果有C语言的基础,对于本节内容一定感觉非常轻松,编程语言之间的都是相通的,只不过C语言属于面向过程编程,而JAVA语言则是一种面向过程的设计思路,相信以后的发展一定会朝着面向服务的方向. 废话不多说,开始今天的总结: 1.标示符: 标示符为何物?它就是JAVA规定的一种命名规则.凡是需要你自己进行命名的地方都需要遵守JAVA的标示符规则,JAVA标识符包括:a.标识符是由英文字母.下划线(_).美元符号($)和数字

Java复习第二天---JavaSE基础

[1]以下关于 JVM 的叙述,哪些项正确? A.JVM 运行于操作系统之上,它依赖于操作系统 B.JVM 运行于操作系统之上,它与操作系统无关 C.JVM 支持 Java 程序运行,它能够直接运行 Java 字节码文件 D.JVM 支持 Java 程序运行,它能够直接运行 Java 源代码文件 扩展名为.java的是源代码文件(文本文件):开发时编写代码的文件 扩展名为.class的是字节码文件(二进制):系统运行时执行的文件 [2]下列选项中正确的表达式是: A.byte b = 128; 

JavaSe基础回顾(一)

JavaSe基础知识点总结 1.变量 变量是内存中用来存放特定数据类型数据的一块内存空间,它的值是可以改变的.Java中的变量有四个基本属性:变量名,数据类型,存储单元和变量值 变量名:合法的标识符 变量的数据类型:可以是基本类型和引用类型(必须包含类型) 存储单元:存储单元大小是由数据类型决定的,如:int 为4个字节32位 变量值:在存储单元中存放的值 变量的声明格式: 类型 变量名: 2.运算符 运算符种类                       符号 赋值运算符           

java学习之路之javaSE基础1

<h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用举例 * 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件和软件所组成,没有安装任何软件的计算机称为裸机.常见的形式有台式计算机.笔记本计算机.大型计算机等. * 应用举例 * 1:科学计算 * 2.数据处理 * 3.自动控制 *

一篇文章带你了解JavaScript中的基础算法之“字符串类”

作者 | Jeskson 来源 | 达达前端小酒馆 1 算法可以干什么呢?提高什么?有什么好处呢? 前端的同学需要提升编程核心内功,建立和健全算法知识体系,基础算法.数据结构.进阶算法,由浅入深讲解,透彻理解抽象算法,算法面试是关键一环,冲击大厂前端offer. 学习算法前掌握ES6哦!需要掌握单元测试的语言,Jest Jest is a delightful JavaScript Testing Framework with a focus on simplicity. It works wi

JavaSE基础之JDBC

JavaSE基础之JDBC 1.JDBC 的步骤: ①加载数据库驱动: a.MySQL:com.mysql.jdbc.Driver: b.SQLServer:com.microsoft.jdbc.sqlserver.SQLServerDriver: c.Oracle:oracle.jdbc.driver.OracleDriver: ②获取数据库链接:  a.MySQL:jdbc:mysql://localhost:3306/DataBaseName: b.SQLServer:jdbc:sqlse

5-31 字符串循环左移 (20分)

输入一个字符串和一个非负整数N,要求将字符串循环左移N次. 输入格式: 输入在第1行中给出一个不超过100个字符长度的.以回车结束的非空字符串:第2行给出非负整数N. 输出格式: 在一行中输出循环左移N次后的字符串. 输入样例: Hello World! 2 输出样例: llo World!He #include <stdio.h> #include <stdlib.h> int main() { int N; int length = 0; char a[100],b[100];

*字符串-05. 字符串循环左移

1 /* 2 * Main.c 3 * D5-字符串-05. 字符串循环左移 4 * Created on: 2014年8月19日 5 * Author: Boomkeeper 6 ********部分通过******* 7 */ 8 9 #include <stdio.h> 10 11 int main(void){ 12 13 char str[100]={0}; 14 int N=0; 15 int endIndex=99;//字符串的结尾标识符 16 17 gets(str); 18

10-4. 字符串循环左移(20)

输入一个字符串和一个非负整数N,要求将字符串循环左移N次. 输入格式: 输入在第1行中给出一个不超过100个字符长度的.以回车结束的非空字符串:第2行给出非负整数N. 输出格式: 在一行中输出循环左移N次后的字符串. 输入样例: Hello World! 2 输出样例: llo World!He 1 #include <stdio.h> 2 #include <string.h> 3 4 int main() 5 { 6 char str[101]; 7 int t; 8 gets