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 {
Scanner scan = new Scanner(System.in);
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上一页,输入其他定向跳章:");
String sn = scan.next();
char c = sn.charAt(0);
if (c=='q'){
index++;
}else if (c =='w'){
index--;
}else{
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;
}
}
}

}
 
posted @ 2023-01-16 16:35  不想输入手机号和邮箱  阅读(216)  评论(1)    收藏  举报