当前位置:编程学习 > JAVA >>

JAVA 文本操作

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编程出错了 求大神

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,