首页 > 编程语言 >Java控制台摸鱼看书大法

Java控制台摸鱼看书大法

时间:2023-01-16 16:46:47浏览次数:51  
标签:return String temp static 摸鱼 input put Java 控制台

“本代码由摸鱼本鱼提供”
老板:控制台虽然好看,也不能看一整天啊! 

(因为小说章节不准确,定位章节可能会有偏差,这个只能自己调整了)

效果图:

 

 

 

 

废话不多说,直接上代码!

 

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

相关文章

  • JavaScript async/await 的用法以及它与 Promise 的区别
    async/await是JavaScript中的语法糖,用于简化异步代码的编写。它允许你在异步代码中使用同步风格的语法,使代码更易于阅读和维护。用法:使用关键字async声明一个异步......
  • 图片上传报错 java.lang.IllegalArgumentException: image == null!
    记录一次报错java.lang.IllegalArgumentException:image==null!jdk版本:openjdk1.8问题复现:使用  ImageIO.read(newFileInputStream(imgPath)) 进行图片读取时,......
  • 算法学习01—Java底层的正整数与负整数
    算法学习01—Java底层的正整数与负整数本节课学到的知识编写一个方法,打印出int类型数字的二进制长什么样为什么int类型的最大值是2^32-1,最小值是-2^32......
  • JavaBean
      ......
  • 2022网鼎杯ezjava分析
    文章首发于sec-inhttps://www.sec-in.com/article/2042拿到题目代码只有一个EvilController控制器,获取base参数值然后base64解码后带入readObject,很明显的一个反序列化......
  • javascript中怎么将字符串转换为函数
    要将字符串转换为函数“ eval() ”,应使用方法。此方法将字符串 作为参数并将其转换为函数。语法eval(string);示例在以下示例中,在字符串本身中,使用函数分配了一个名......
  • JavaDoc
    JavaDocjavadoc命令是用来生成自己的API文档(帮助文档)的,需要配合注解使用参数信息​ @author作者名​ @version版本号​ @sincejdk版本​ @param参数名​ @ret......
  • Java运算符
    ++出现在变量前和变量后的区别当++出现在变量后会先做赋值运算,再自加一当++出现再变量前会先做自加一运算,再赋值什么是短路现象,什么时候会发生短路?当左边的表达式为f......
  • Java动态代理机制
    概念代理模式是Java当中最常用的设计模式之一。其特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等......
  • javaScript中的一些简写,请备好!
    废话不多说,直接列举一些JavaScript中的简写语法,仅供大家参考!1、当我们确实有一个对象数组并且我们想要根据对象属性查找特定对象时,find方法确实很有用。constdata=[......