一道面试题目,大家给个思路:加载一个装有如有格式的txt文件:
姓名:小明
籍贯:四川
应聘职位:测试
学校:川大
姓名:小王
籍贯:湖北
应聘职位:开发
学校:西北工业大学
姓名:小李
籍贯:江苏
应聘职位:美工
学校:苏州大学要求用一个转换按钮,当点击此按钮的时候,将此文本文件的内容按如下格式输出:姓名     籍贯      应聘职位    学校 
小明     四川      测试        川大
小王     湖北      开发        西北工业大学
小李     江苏      美工        苏州大学写出此转换按钮的实现思路(要对齐)

解决方案 »

  1.   

    对象类具有4个属性姓名
    籍贯
    应聘职位
    学校
    4个get/set
    再加一个打印方法,创建4个实例,放list里。遍历list,取对象打印。这样容错,扩展好一些。
      

  2.   

    先把TXT的内容存到集合里,然后你想怎么打印就怎么控制就是了
      

  3.   

    思路很清晰啊 就是两个点 一个读文件 一个数组或者Vector的应用至于按钮  对齐那都是小菜了
      

  4.   

    没有做图形,只生成了二维数组:
    public class FormatTranslator { public ArrayList<ArrayList<String>> blist = new ArrayList<ArrayList<String>>(); public ArrayList<String> curList = null;
    public ArrayList<String> titleList = null;
    public int len = 0;
    public int count = 0; public static void main(String[] args) {
    FormatTranslator f = new FormatTranslator();
    f.translate();
    } public FormatTranslator() {
    titleList = new ArrayList<String>();
    curList = new ArrayList<String>();
    blist.add(titleList);
    blist.add(curList);
    } public void translate() {
    try {
    BufferedReader br = new BufferedReader(new FileReader("c:/2.txt"));
    String str = null;
    String key = null;
    String value = null;
    while ((str = br.readLine()) != null) {
    String[] temp = str.split(":");
    key = temp[0];
    value = temp[1];
    addElement(key, value);
    } System.out.println(blist); } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    } public void addElement(String key, String value) {
    if (containsKey(key) && len == 0) {
    len = titleList.size();
    count = len;
    } if (len == 0) {
    titleList.add(key);
    curList.add(value);
    } else {
    if (count == len) {
    curList = new ArrayList<String>();
    blist.add(curList);
    count = 0;
    }
    curList.add(value);
    count++;
    }
    } private boolean containsKey(String key) {
    return titleList.contains(key);
    }
    }打印:
    [[姓名, 籍贯, 应聘职位, 学校], [小明 , 四川 , 测试 , 川大 ], [小王 , 湖北 , 开发 , 西北工业大学 ], [小李 , 江苏 , 美工, 苏州大学]]
      

  5.   


    元素个数已经固定 不应该用list  使用数组效率更高
      

  6.   

    修改了一下楼上兄弟的:
    for (int i = 0; i < blist.size(); i++) {
    for (int j = 0; j < blist.get(i).size(); j++) {
    System.out.print(blist.get(i).get(j) + "\t");
    }
    System.out.println();
    }
      

  7.   


    import java.io.*;
    import java.util.*;class list {    class elem {        String[] data = new String[4];        elem(String[] st) {
                System.arraycopy(st, 0, data, 0, data.length);
            }
        }
        //姓名,籍贯,应聘职位,学校
        static String[] KEYS = {"姓名", "籍贯", "应聘职位", "学校"};
        int[] str_len = {KEYS[0].length(), KEYS[1].length(), KEYS[2].length(), KEYS[3].length()};
        LinkedList<elem> list = new LinkedList<elem>();    public void add(String[] st) {
            if (st == null || st.length < str_len.length) {
                return;
            }
            for (int i = str_len.length - 1; i > -1; i--) {
                if (st[i] != null && st[i].length() > str_len[i]) {
                    str_len[i] = st[i].length();
                }
            }
            list.add(new elem(st));
        }    @Override
        public String toString() {
            String str = KEYS[0] + getE(2 + str_len[0] - KEYS[0].length()) + KEYS[1] + getE(2 + str_len[1] - KEYS[1].length()) + KEYS[2] + getE(2 + str_len[2] - KEYS[2].length()) + KEYS[3] + "\n";
            for (elem m : list) {
                str += m.data[0] + getE(2 + str_len[0] - m.data[0].length()) + m.data[1] + getE(2 + str_len[1] - m.data[1].length()) + m.data[2] + getE(2 + str_len[2] - m.data[2].length()) + m.data[3] + "\n";        }
            return str;
        }    private String getE(int i) {
            return i > 1 ? " " + getE(i - 1) : " ";
        }
    }public class FormatTranslator {    public static void main(String[] args) throws FileNotFoundException, IOException {        BufferedReader br = new BufferedReader(new FileReader("d:/2.txt"));
            String str = null;
            String[] value = new String[4];
            list l = new list();
            int i = 0;
            while ((str = br.readLine()) != null) {
                String[] temp = str.split(":");
                value[i++] = temp[1].trim();
                if (i == 4) {
                    i = 0;
                    l.add(value);
                }
            }
            System.out.println(l);
        }
    }
    /*
    run:
    姓名  籍贯  应聘职位  学校
    小明  四川  测试    川大
    小王  湖北  开发    西北工业大学
    小李  江苏  美工    苏州大学成功生成(总时间:0 秒)*/
    /*2.txt
    姓名:小明 
    籍贯:四川 
    应聘职位:测试 
    学校:川大 
    姓名:小王 
    籍贯:湖北 
    应聘职位:开发 
    学校:西北工业大学 
    姓名:小李 
    籍贯:江苏 
    应聘职位:美工 
    学校:苏州大学
    */
      

  8.   


    如果在实际应用中,不能拿这个来做吧?
    我觉得面试不一定是看你能否解决问题,应该是你的编程思想以前我们有面试题,就是简单计算器
    但面试者的目的是看你能否用 OOP+DP 来实现与扩展