JavaSE基礎練習001_IO,字符串,循環
阿新 • • 發佈:2017-06-30
基礎 nts txt scan line buffered insert idc for
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基礎練習001_IO,字符串,循環