zoukankan      html  css  js  c++  java
  • 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处理了,可以每次读取一行身份号码进行处理,还涉及到了字符串的解析。

  • 相关阅读:
    react log
    valueOf()、toString()、toLocaleString()三个方法的区别
    git 多账号配置 mac和windows10 记录一下
    js执行顺序,Promise和async中的立即执行
    js事件冒泡及event的target和currentTarget的区别
    canvas 旋转时 中心点的坑
    uni app 在组件中操作 canvas 已踩坑
    js 预编译原理
    mixins 在装饰器 vue-property-decorator 中的使用
    js 面向对象和函数式编程
  • 原文地址:https://www.cnblogs.com/dreamyu/p/7096434.html
Copyright © 2011-2022 走看看