“本代码由摸鱼本鱼提供”
老板:控制台虽然好看,也不能看一整天啊!
(因为小说章节不准确,定位章节可能会有偏差,这个只能自己调整了)
效果图:
废话不多说,直接上代码!
import java.io.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 摸鱼本体 * @Description:看到开始后输入章节回车 * @Auther: lig * @Date: 2023/1/16 9:54 */ public class Main { //设定好这个路径就可以启动了 private static String FILE_PATH = "C:\\Documents\\电子书\\儒道至圣.txt"; //每行长度,没啥问题可以不用改 private static int LINE_MAX_LENGTH = 60; public static void main(String[] args) throws IOException { readFile(); } public static void readFile() throws IOException { System.out.println("加载文件中..."); FileInputStream fis = null; Pattern p = Pattern.compile(".*第(.*?)章.*"); String txt = ""; List<String> list = new ArrayList<>(); try { fis = new FileInputStream(FILE_PATH); InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); BufferedReader br = new BufferedReader(isr); String line = ""; while ((line = br.readLine())!=null){ Matcher m = p.matcher(line); if (m.matches()){ //验证码章节数格式 String chapter = m.group(1); if (!verifyNumber(chapter)){ //不是数字就转数字,识别不出默认为0 int chapterInt = NumberUtils.toNumber(chapter); String[] strs = line.split("章"); line = "第"+chapterInt+"章"+strs[1]; } list.add(txt); txt = ""; } line = line.replaceAll("(.{"+LINE_MAX_LENGTH+"})", "$1\n"); line += "\tc.b.m.c.m.TableInfoHelper - [initTableFields,301] - Can not find table primary key in Class: \"com.ctsy.plan.entity.eea.EeaDept\"."+generateRandomWords().toString()+""; txt += line; } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } System.out.println("开始输入章节数并回车(例如三百三十章:330)"); Scanner scan = new Scanner(System.in); readBook(list,scan.nextInt()); } private static void readBook(List<String> list, int index) throws IOException { String content = list.get(index); content = content.replace(" ","\n"); System.out.println(content); System.out.println("\n\n\n\n"); System.out.print("上次定位坐标为:"+index+"\n输入q下一页,输入w上一页,输入其他定向跳章:"); char c = (char)System.in.read(); if (c=='q'){ index++; }else if (c =='w'){ index--; }else{ Scanner scan = new Scanner(System.in); System.out.print("输入章节数:"); index = scan.nextInt(); } readBook(list,index); } /** * 数字转文字 * @Author lig * @Date 2023/1/16 11:40 * @param number * @return String */ public static String convert(int number) { //数字对应的汉字 String[] num = {"一", "二", "三", "四", "五", "六", "七", "八", "九"}; //单位 String[] unit = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千", "万亿"}; //将输入数字转换为字符串 String result = String.valueOf(number); //将该字符串分割为数组存放 char[] ch = result.toCharArray(); //结果 字符串 String str = ""; int length = ch.length; for (int i = 0; i < length; i++) { int c = (int) ch[i] - 48; if (c != 0) { str += num[c - 1] + unit[length - i - 1]; } } return str; } /** * 验证章节数文本是否为数字 * @Author lig * @Date 2023/1/16 11:43 * @param txt * @return boolean */ public static boolean verifyNumber(String txt){ Pattern p = Pattern.compile("[0-9]+"); Matcher matcher = p.matcher(txt); return matcher.matches(); } /** * 敷衍一下,预留个位置 * 迷惑性质 * @Author lig * @Date 2023/1/16 15:30 * @param * @return java.lang.String[] */ public static String[] generateRandomWords() { return new String[]{"1","2"}; } /** * 简单的数字工具 * @Author lig * @Date 2023/1/16 16:14 * @return */ static class NumberUtils { static HashMap<Character,Integer> number=new HashMap(){{ put('一',1); put('二',2); put('三',3); put('四',4); put('五',5); put('六',6); put('七',7); put('八',8); put('九',9); }}; static HashMap<Character,Integer> digit=new HashMap(){{ put('十',10); put('百',100); put('千',1000); put('万',10000); put('亿',100000000); }}; static List<Integer> temp=new ArrayList(); public static int toNumber(String str){ boolean ok=process(str); int res=0; if(ok){ for(int i:temp){ res+=i; } } return res; } public static boolean process(String input){ if(input.equals("")) return true; else if(digit.containsKey(input.charAt(0))){ if(temp.size()==0 || temp.get(temp.size()-1) >= digit.get(input.charAt(0))){ return false; } int cur=0; while(temp.size()>=1 && temp.get(temp.size()-1) < digit.get(input.charAt(0))){ cur+=temp.get(temp.size()-1); temp.remove(temp.size()-1); } temp.add(cur*digit.get(input.charAt(0))); return process(input.substring(1)); }else if(number.containsKey(input.charAt(0))){ temp.add(number.get(input.charAt(0))); return process(input.substring(1)); }else if(input.charAt(0)=='零'){ return process(input.substring(1)); }else{ return false; } } } }
标签:return,String,temp,static,摸鱼,input,put,Java,控制台 From: https://www.cnblogs.com/ganggang7878/p/17055776.html