练习一.关键字:文件读取 数字转换

有文件test.txt,里面数据如下:

239、567、345

540/137/879
247//839//693
658/369/147
247//十:389//个:369
4679---4679---4679
3469*0479*3689

345679 、 013568 、 52980371


要求:
编写程序,从out.txt中读取内容,经过处理后,显示
效果(每行一条数据)如下:

0145678、0123489、0126789
1236789、0245689、0123456
0135689、0124567、0124578
0123479、0124578、0235689
0135689、0124567、0124578
012358、012358、012358
012578、123568、012457
0128、2479、46

注:相当于将每条数据中,每部分数字换成没有出现的数字(0~9)
如: 345679 、 013568 、 52980371 这条数据
经过处理后,变成:
0128、2479、46 这条数据。



public class TestReadAndConvert {

	public static void main(String args[]) throws Exception {

		String fileName = "d:\\test.txt";
		File file = new File(fileName);

		String temp = null;
		FileReader fr;
		fr = new FileReader(file);
		BufferedReader bf = new BufferedReader(fr);
		String[] tmpArray = null;
		while ((temp = bf.readLine()) != null) {
			tmpArray = getArray(temp.trim());
			for (String s : tmpArray) {
				System.out.print(getConvert("0123456789", s.trim()));
				System.out.print(",");
			}
			System.out.println();
		}
	}

	// 拆分数组
	public static String[] getArray(String aim) {

		String[] array = null;

		String regex = "(\\D)+";

		array = aim.split(regex);

		return array;

	}

	// 取出0-9中不包含改数组的数字
	public static String getConvert(String source, String deleStr) {

		char[] parent = source.toCharArray();

		Arrays.sort(parent);
		
		char[] son = deleStr.toCharArray();
		
		Arrays.sort(son);

		StringBuffer sb = new StringBuffer();

		for (int i = 0, k = 0; i < parent.length; i++) {

			if (parent[i] == son[k]) {
				k++;
				if (k >= son.length) {
					k = son.length - 1;
				}
			} else {
				sb.append(parent[i]);
			}
		}

		return sb.toString();

	}
}

该题地址:http://topic.csdn.net/u/20111106/11/97ec8d0f-2d04-42e1-9145-b1bcf22b0125.html#r_76356206


还是有一定的bug:例如当拆分的字符串中含有空格是,会出cuo。下次再考虑解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值