您的位置:首页 > 编程语言

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

2015-11-06 15:50 260 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程