JAVA 文本操作
JAVA中,读取一个TXT文本,并经过修改输出到另一个新的TXT文本中 修改规则:两个数字、两个字母、两个英文标点、两个空格算一个字; 汉字一个字算一个;所有加在一起,每行最多19个字,多出部份换行输出 如:“1.2.1 这是第一行的内容,判断是否超过了19个字,参照以上规则” 如何实现
JAVA中,读取一个TXT文本,并经过修改输出到另一个新的TXT文本中 修改规则:两个数字、两个字母、两个英文标点、两个空格算一个字; 汉字一个字算一个;所有加在一起,每行最多19个字,多出部份换行输出 如:“1.2.1 这是第一行的内容,判断是否超过了19个字,参照以上规则” 如何实现
答案:说的不是很详细哎……这个规则意思其实是:汉字算一个,非汉字算0.5个吧;按照每行最多19个的要求,其实18.5个也是有可能要换行的(18个汉字加一个标点加一个汉字就超过了,所以18.5个就要换行),按照这样的理解,代码如下:
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class t1 {
public static void main(String args[]) throws IOException{
String path1 = "F:\\test1.txt";
String path2 = "F:\\test2.txt";
Pattern p1 = Pattern.compile("[\u4e00-\u9fa5]");
Reader r1 =new InputStreamReader(new FileInputStream(path1));
BufferedWriter bw = new BufferedWriter(new FileWriter(path2));
int c=0;
float count=0;
StringBuffer bfStr = new StringBuffer();
while((c=r1.read())!=-1){
String str = (char)c+"";
Matcher m = p1.matcher(str);
if(m.matches()){
count++;
}else{
count += 0.5;
}
if((char)c=='\r'){
bw.write(bfStr.toString());
bw.newLine();
bfStr = new StringBuffer();
count = 0;
}else{
if(count>19){
bw.write(bfStr.toString());
bw.newLine();
bfStr = new StringBuffer();
bfStr.append(str);
count=0;
}else{
bfStr.append(str);
}
}
}
if(bfStr.toString()!=""){
bw.write(bfStr.toString());
}
bw.close();
}
}
补充一句:原来文本的换行格式给你保留了,一般这个不会让你改的吧,你也没说清楚。。。
其他:hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh 两个数字、两个字母、两个英文标点、两个空格算一个字 分别 算一个字,还是 加起来 算一个字 还是没看懂
上一个:请详解这个正则表达式,谢谢?var _r_function = /^function\b\s*([$\w\u00FF-\uFFFF]+)\s*\(/m;
下一个:java编程出错了 求大神