(java)给定固定长度根据字符长分割文档

给定固定长度(数组 aa[ ])
根据字符长(非字节长度)分割文档
最后输出去除空格以 ^ 拼接的文档

第一个class

package work;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class T1 {

	// inputFilePath 输入文件路径
	public static void parseCunegFile(String inputFilePath,String outputFilePath, int[] aa) throws Exception {
		
		BufferedWriter bw = null;
		BufferedReader br = null;
		
		int[] bb = new int[aa.length];
		bb[0] = 0;
		for (int i = 1; i < bb.length; i++) {
			bb[i] = bb[i - 1] + aa[i - 1]+1;
			aa[i]=aa[i]-1;
		}
		
		try {
			//读取输入的文件
			File ifile = new File(inputFilePath);
			InputStream is = new FileInputStream(ifile);
			//没有则创建输出的文件
			File ofile = new File(outputFilePath);
			//FileOutputStream out=new FileOutputStream(ofile);
			if(!ofile.exists()){
				ofile.createNewFile();
			}
			
			bw=new BufferedWriter(new FileWriter(ofile,true));
			br = new BufferedReader(new InputStreamReader(is, Charset.forName("gbk")));
			
			String line = "";
			// 读取每一行
			while ((line = br.readLine()) != null) {
				String str = "";
				// 循环要获取的长度
				for (int i = 0; i < aa.length; i++) {
					str = str.trim()+T2.substringByte(line, bb[i], aa[i]).trim()+"^";
				}
				str = str.substring(0,str.length()-1);
				bw.write(str+"\n");
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			br.close();
			bw.close();
		}
		
	}
	
	
}

第二个class

package work;


public class T2 {

	// orignal:需要截取的每一行       start:从第几位开始           count:截取几位
	public static String substringByte(String orignal, int start, int count) throws Exception {
		// 目标char Pull buff缓存区间;
		StringBuffer buff = new StringBuffer();
		char c;
		int len = 0;
		// 遍历String的每一个Char字符,计算当前总长度
        // 如果到当前Char的的字节长度大于要截取的字符总长度,则跳出循环返回截取的字符串。
		for (int i = 0; i < orignal.toCharArray().length; i++) {
			 c = orignal.charAt(i);
			 len += String.valueOf(c).getBytes("GBK").length;
             if (len >= start && len <= start + count) {
                 buff.append(c);
             }
             if (len > start + count)
                 break;
		}
		// 返回最终截取的字符结果;
		// 创建String对象,传入目标char Buff对象
		return new String(buff);
	}

}

测试

package work;

public class Test {

	public static void main(String[] args) throws Exception {
		int[] aa = {32,20,2,8,5,100,15,1,1,1,1,40,1};
		T1.parseCunegFile("C:\\Users\\Administrator\\Desktop\\1.txt","C:\\Users\\Administrator\\Desktop\\2.txt", aa);
	}
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值