高手帮帮忙,一道笔试题

xiaanming 2012-12-12 10:43:07
a.b.c.d
a.c.d.z
a.c.c
b.a

转换成如下格式的文本:

root
|---a
|---b
|---c
|---d
|---c
|---d
|---z
|---c
|---c
|---b
|---a

下面是我写的部分代码

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;


public class Test {
static String s = null;

public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:/javaProject/dir.txt")));

while((s = br.readLine()) != null){
String[] arr = s.split("\\.");

for(int i = 0; i < arr.length; i++){
String ou = "";
for(int p = 0; p < i; p++){
ou += "\t";
}
ou += "|---" + arr[i];
System.out.println(ou);
}

}

if(br != null){
br.close();
br = null;
}
} catch (FileNotFoundException e) {
System.out.println("文件读取错误!");
} catch (IOException e) {
e.printStackTrace();
}
}
}


我打印的结果是:
|---http
|---ting
|---baidu
|---com
|---song
|---946428
|---http
|---ting
|---baidu
|---com
|---song
|---1670643
|---http
|---ting
|---baidu
|---com
|---song
|---1400921
|---http
|---ting
|---baidu
|---com
|---song
|---1263029
|---http
|---ting
|---baidu
|---com
|---song
|---1137358


需要的效果是:
|---http
|---ting
|---baidu
|---com
|---song
|---946428

|---1137358

|---1263029

|---946428

...全文
286 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiwei2012start 2014-07-07
  • 打赏
  • 举报
回复
数据结构,字典树可以解决。
助我成长 2014-07-06
  • 打赏
  • 举报
回复
只想问楼主现在被录用了没有,薪资多少
xiaanming 2012-12-12
  • 打赏
  • 举报
回复
|---http |---ting |---baidu |---com |---song |---1670643 |---http |---ting |---baidu |---com |---song |---1400921 |---http |---ting |---baidu |---com |---song |---1263029
zly361814478 2012-12-12
  • 打赏
  • 举报
回复
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class CsdnTestSort {
    /**
     * 
     * @param file 文件内容以楼主给的例子相同。
     * @return
     * @throws Exception
     */
	public static List<String[]> loadFile(File file) throws Exception{
		//存放有几组数据。
		 List<String[]> list = new ArrayList<String[]>();
		
		BufferedReader bfr =  new BufferedReader(new FileReader(file));	
		
		String str = null;
		while(null!=(str=bfr.readLine())){
			String[] array = str.split("\\.");
			list.add(array); //读取一行作为一组数据。
		//	System.out.println(array.length);
		}	
		return list;
	}
	//得到有多少层,多一层前面就多两个空格
	public static void getSpace(int index){
		for(int i =0;i<index;i++){
			System.out.print("  ");
		}
	}
	public static void sortAll(List<String[]> list){
		 //set用来存放每一组的,第一个元素。 
		Collections.sort(list,new DeComparator());
		Set<String> set =  new HashSet<String>();
		for(int i = 0; i<list.size();i++){
			String[] array = list.get(i);
		    int number=array.length;
		    int flag =0;//默认情况下是 头元素是没有重复的。
		    //如果重复了,让flag变为1方面循环打印的时候不打印第一个元素。
		    if(set.contains(array[0])){
		    	flag=1;
		    }
		    for(int j=flag;j<number;j++){
		    	getSpace(j);// 打印空格。
		    	System.out.print("|---"+array[j]);
		    	System.out.println();  		       
		    }
		    set.add(array[0]); //把头元素加入到set,就可以判断下一次是否有重复的头元素。
		}
	}
	public static void main(String[] args) throws Exception {
		sortAll(loadFile(new File("text.txt")));
	
	}
}

 class DefineComparator implements Comparator{

	@Override
	public int compare(Object o1, Object o2) {
		
		return 0;
	}
	 
 }
 
 class DeComparator implements Comparator{

		@Override
		public int compare(Object o1, Object o2) {
			String[] str1 = (String[])o1;
			String[] str2 = (String[])o2;
			return str1[0].compareTo(str2[0]);
		}
		
	}


这是最完整的
zly361814478 2012-12-12
  • 打赏
  • 举报
回复
这只是针对给出的例子,还是有点弊端,就是相同的头元素必须顺序放在一起。不能随即存放, 得稍加改动下
zly361814478 2012-12-12
  • 打赏
  • 举报
回复


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class CsdnTestSort {
    /**
     * 
     * @param file 文件内容以楼主给的例子相同。
     * @return
     * @throws Exception
     */
	public static List<String[]> loadFile(File file) throws Exception{
		//存放有几组数据。
		 List<String[]> list = new ArrayList<String[]>();
		
		BufferedReader bfr =  new BufferedReader(new FileReader(file));	
		
		String str = null;
		while(null!=(str=bfr.readLine())){
			String[] array = str.split("\\.");
			list.add(array); //读取一行作为一组数据。
		//	System.out.println(array.length);
		}	
		return list;
	}
	//得到有多少层,多一层前面就多两个空格
	public static void getSpace(int index){
		for(int i =0;i<index;i++){
			System.out.print("  ");
		}
	}
	public static void sortAll(List<String[]> list){
		 //set用来存放每一组的,第一个元素。 
		Set<String> set =  new HashSet<String>();
		for(int i = 0; i<list.size();i++){
			String[] array = list.get(i);
		    int number=array.length;
		    int flag =0;//默认情况下是 头元素是没有重复的。
		    //如果重复了,让flag变为1方面循环打印的时候不打印第一个元素。
		    if(set.contains(array[0])){
		    	flag=1;
		    }
		    for(int j=flag;j<number;j++){
		    	getSpace(j);// 打印空格。
		    	System.out.print("|---"+array[j]);
		    	System.out.println();  		       
		    }
		    set.add(array[0]); //把头元素加入到set,就可以判断下一次是否有重复的头元素。
		}
	}
	public static void main(String[] args) throws Exception {
		sortAll(loadFile(new File("text.txt")));
	}
}

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧