《编程珠玑》第二章问题C:找出相同的英文单词(单词改变顺序可以互相转化即为相同)

来源:互联网 发布:北京软件 编辑:程序博客网 时间:2024/05/02 04:37
public class FindSameWord {    public static void main(String[] args) {        // TODO Auto-generated method stub        String filename = "doc//obama.txt";        FindSameWord fs = new FindSameWord();        String txt = fs.getTXT(filename);        ArrayList<String> arrayList = new ArrayList<String>();        HashMap<String, String> fingerPrint = new HashMap<String, String>();        StringTokenizer st = new StringTokenizer(txt, ", ! ' . ��");// 按逗号/空格/叹号分割,其他字符自行添加        while (st.hasMoreElements()) {            String tmp = (String) st.nextElement();            if (tmp != "" && tmp != null && tmp != "s" && !arrayList.contains(tmp.toLowerCase()))                arrayList.add(tmp.toLowerCase());        }        System.out.println(arrayList.size());        fs.sortList(arrayList);        for (int i = 0; i < arrayList.size(); i++) {//          System.out.println(i + "," + arrayList.get(i) + ":");            if (!fingerPrint.containsKey(fs.makeFinger(arrayList.get(i))))                fingerPrint.put(fs.makeFinger(arrayList.get(i)), arrayList.get(i));            else                fingerPrint.put(fs.makeFinger(arrayList.get(i)),                        fingerPrint.get(fs.makeFinger(arrayList.get(i))) + "," + arrayList.get(i));        }        for (Map.Entry<String, String> entry : fingerPrint.entrySet()) {//          System.out.println(entry.getKey() + "--->" + entry.getValue());            if (entry.getValue().contains(","))                System.out.println(entry.getKey() + "--->" + entry.getValue());        }//      System.out.println(fs.stringSort("alive"));//      System.out.println(fs.makeFinger("aliive"));    }    String getTXT(String filename) {        String txt = "";        try {            File file = new File(filename);            BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件            String s = null;            while ((s = br.readLine()) != null) {//使用readLine方法,一次读一行                txt = txt + s;            }            br.close();        } catch (Exception e) {            e.printStackTrace();        }        return txt;    }    ArrayList<String> sortList(ArrayList<String> al) {        for (int i = 0; i < al.size(); i++) {            for (int j = i + 1; j < al.size(); j++) {                if (!stringCompare(al.get(i), al.get(j))) {                    String tmp = al.get(i);                    al.set(i, al.get(j));                    al.set(j, tmp);                }            }        }        return al;    }    boolean stringCompare(String a, String b) {        int aLength = a.length();        int bLength = b.length();        int length = 0;        if (aLength > bLength)            length = bLength;        else            length = aLength;        for (int i = 0; i < length; i++) {            if (a.charAt(i) < b.charAt(i))                return true;            if (a.charAt(i) > b.charAt(i))                return false;        }        if (aLength > bLength)            return false;        else            return true;    }    String makeFinger(String s) {        if (s.length() == 1)            return s;        String fingerPrint = "";        String print = stringSort(s);//      System.out.println("print"+print);        char now = print.charAt(0);        int count = 1;        for (int i = 1; i < print.length(); i++) {            if (print.charAt(i) == now) {                count++;                if (i == print.length() - 1)                    fingerPrint = fingerPrint + String.valueOf(now) + String.valueOf(count);            } else {                if (count == 1)                    fingerPrint = fingerPrint + String.valueOf(now);                else                    fingerPrint = fingerPrint + String.valueOf(now) + String.valueOf(count);                count = 1;                now = print.charAt(i);                if (i == print.length() - 1)                    fingerPrint = fingerPrint + String.valueOf(now);            }        }//      System.out.println(fingerPrint);        return fingerPrint;    }    String stringSort(String s) {        String after = "";        char[] tmp = s.toCharArray();        for (int i = 0; i < tmp.length; i++) {            for (int j = i + 1; j < tmp.length; j++) {                if (tmp[i] > tmp[j]) {                    char hou = tmp[j];                    tmp[j] = tmp[i];                    tmp[i] = hou;                }            }        }        after = String.valueOf(tmp);//      System.out.println(after);        return after;    }}
0 0
原创粉丝点击