有文件test.txt,里面数据如下:
239、567、345
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.youkuaiyun.com/u/20111106/11/97ec8d0f-2d04-42e1-9145-b1bcf22b0125.html#r_76356206
还是有一定的bug:例如当拆分的字符串中含有空格是,会出cuo。下次再考虑解决。