文本处理工具类
前言:自己下载的小说中关于每个章节样式都是:001,002,003,004,005,可是我的手机端的可以识别的样式都是:第一章,第二章,第三章,所以好生气?,没办法,只能自己写一个工具类封装好一些方法,然后,将文本转化为自己想要的标题格式。
维护文本标题修改工具类:
package org.apache.dubbo.demo;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
//有一部小说中的章节都是001.002,手机阅读软件不识别,特别开发这个类进行字符串处理
public class TextUtil {
// 将数字转化成固定长度格式的字符串:001
public static String numToString(Integer num, Integer length) {
{
String str = new String();
// 数的log10(num)
Integer n = (int) (Math.log(num) / Math.log(10));
for (int i = 1; i < length - n; i++) {
str = str + "0";
}
str = str + num + "";
return str;
}
}
// 将数字转化为中文数字
public static String numToChina(Integer num) {
// Integer n = (int) (Math.log(num) / Math.log(10));
String cnum[] = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"};
String placenum[] = {"十", "百", "千"};
String s = new String();
List<Integer> list = TextUtil.getNum(num);
System.out.println(list.size()+"=====");
// 处理个位数
if (list.size()==1){
s=cnum[num];
return s;
}
// 处理十位数
if (list.size()==2){
if (list.get(1)==1){
s=placenum[0];
}else {
s=cnum[list.get(1)]+placenum[0];
}
if (list.get(0) != 0) {
s = s + cnum[list.get(0)];
}
return s;
}
// 三位数的组成方式:
/*
* 两百三十二
* 两百零二
* 两百
* */
if (list.size()==3){
s = cnum[(num / 100)] + placenum[1];
if (list.get(2)!=0){
s=s+cnum[list.get(2)] + placenum[0];
}else {
s=s+cnum[list.get(2)];
}
if (num % 10 != 0) {
s = s + cnum[num % 10];
}
return s;
}
return s;
}
// 倒序将数字位数存入list中
static List<Integer> list=new ArrayList<Integer>();
public static List<Integer> getNum(Integer num){
Integer x=num;
if (x<10){
list.add(x);
List<Integer> result = new ArrayList<>();
result.addAll(list);
list.clear();
return result;
}else {
list.add(x%10);
}
return getNum(x/10);
}
public static void main(String[] args) {
FileReader fr=null;
FileWriter fw=null;
BufferedReader br=null;
BufferedWriter bw=null;
try {
StringBuffer sb = new StringBuffer();
fr = new FileReader("D:\\Work\\learnproject\\incubator-dubbo\\dubbo-demo\\dubbo-demo-api\\src\\main\\java\\org\\apache\\dubbo\\demo\\01.txt");
br = new BufferedReader(fr);
fw = new FileWriter("D:\\Work\\learnproject\\incubator-dubbo\\dubbo-demo\\dubbo-demo-api\\src\\main\\java\\org\\apache\\dubbo\\demo\\02.txt");
bw=new BufferedWriter(fw);
String n;
while ((n=br.readLine())!=null){
sb.append(n+"\n");
}
String s=sb.toString();
for (int i = 1; i <999 ; i++) {
int count = sb.toString().indexOf(TextUtil.numToString(i, 3));
if (count==-1){
break;
}else {
s = s.replace(TextUtil.numToString(i, 3)+"、", "第"+TextUtil.numToChina(i)+"章 ");
}
}
bw.write(s);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bw.close();
fw.close();
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
初始版本1
package org.apache.dubbo.demo;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
//有一部小说中的章节都是001.002,手机阅读软件不识别,特别开发这个类进行字符串处理
public class TextUtil {
// 将数字转化成固定长度格式的字符串:001
public static String numToString(Integer num, Integer length) {
{
String str = new String();
// 数的log10(num)
Integer n = (int) (Math.log(num) / Math.log(10));
for (int i = 1; i < length - n; i++) {
str = str + "0";
}
str = str + num + "";
return str;
}
}
// 将数字转化为中文数字
public static String numToChina(Integer num) {
Integer n = (int) (Math.log(num) / Math.log(10));
String cnum[] = {"零","一", "二", "三", "四", "五", "六", "七", "八", "九", "十"};
String placenum[] = {"十", "百", "千"};
String s = new String();
if (n == 0) {
s = cnum[num];
return s;
}
if (n == 1) {
s = cnum[(num / 10)] + placenum[0];
if (num%10!=0){
s = s+ cnum[num % 10];
}
return s;
}
if (n == 2) {
List<Integer> list1 = getNum(num);
s = cnum[(num / 100)] + placenum[1] + cnum[list1.get(2)] + placenum[0];
if (num%10!=0){
s=s + cnum[num % 10];
}
return s;
}
return null;
}
// 倒序将数字位数存入list中
static List<Integer> list=new ArrayList<Integer>();
public static List<Integer> getNum(Integer num){
Integer x=num;
if (x<10){
list.add(x);
return list;
}else {
list.add(x%10);
}
return getNum(x/10);
}
public static void main(String[] args) {
FileReader fr=null;
FileWriter fw=null;
BufferedReader br=null;
BufferedWriter bw=null;
try {
StringBuffer sb = new StringBuffer();
fr = new FileReader("D:\\Work\\learnproject\\incubator-dubbo\\dubbo-demo\\dubbo-demo-api\\src\\main\\java\\org\\apache\\dubbo\\demo\\01.txt");
br = new BufferedReader(fr);
fw = new FileWriter("D:\\Work\\learnproject\\incubator-dubbo\\dubbo-demo\\dubbo-demo-api\\src\\main\\java\\org\\apache\\dubbo\\demo\\02.txt");
bw=new BufferedWriter(fw);
String n;
while ((n=br.readLine())!=null){
sb.append(n+"\n");
}
String s=sb.toString();
for (int i = 1; i <999 ; i++) {
int count = sb.toString().indexOf(TextUtil.numToString(i, 3));
if (count==-1){
break;
}else {
s = s.replace(TextUtil.numToString(i, 3)+"、", "第"+TextUtil.numToChina(i)+"章 ");
}
}
bw.write(s);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bw.close();
fw.close();
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
测试文本:
001、龙珠
002、孩子额汪
003、路基转
测试结果:
第一章 龙珠
第二章 孩子额汪
第三章 路基转