一道面试题目,大家给个思路:加载一个装有如有格式的txt文件:
姓名:小明
籍贯:四川
应聘职位:测试
学校:川大
姓名:小王
籍贯:湖北
应聘职位:开发
学校:西北工业大学
姓名:小李
籍贯:江苏
应聘职位:美工
学校:苏州大学要求用一个转换按钮,当点击此按钮的时候,将此文本文件的内容按如下格式输出:姓名 籍贯 应聘职位 学校
小明 四川 测试 川大
小王 湖北 开发 西北工业大学
小李 江苏 美工 苏州大学写出此转换按钮的实现思路(要对齐)
姓名:小明
籍贯:四川
应聘职位:测试
学校:川大
姓名:小王
籍贯:湖北
应聘职位:开发
学校:西北工业大学
姓名:小李
籍贯:江苏
应聘职位:美工
学校:苏州大学要求用一个转换按钮,当点击此按钮的时候,将此文本文件的内容按如下格式输出:姓名 籍贯 应聘职位 学校
小明 四川 测试 川大
小王 湖北 开发 西北工业大学
小李 江苏 美工 苏州大学写出此转换按钮的实现思路(要对齐)
籍贯
应聘职位
学校
4个get/set
再加一个打印方法,创建4个实例,放list里。遍历list,取对象打印。这样容错,扩展好一些。
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);
}
}打印:
[[姓名, 籍贯, 应聘职位, 学校], [小明 , 四川 , 测试 , 川大 ], [小王 , 湖北 , 开发 , 西北工业大学 ], [小李 , 江苏 , 美工, 苏州大学]]
元素个数已经固定 不应该用list 使用数组效率更高
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();
}
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
姓名:小明
籍贯:四川
应聘职位:测试
学校:川大
姓名:小王
籍贯:湖北
应聘职位:开发
学校:西北工业大学
姓名:小李
籍贯:江苏
应聘职位:美工
学校:苏州大学
*/
如果在实际应用中,不能拿这个来做吧?
我觉得面试不一定是看你能否解决问题,应该是你的编程思想以前我们有面试题,就是简单计算器
但面试者的目的是看你能否用 OOP+DP 来实现与扩展