

package spell;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;
/**
* 1、创建一个List集合存储字典集
* 2、创建一个List集合存储需要检查的集合
* 3、将需要检查的集合与字典集合进行比对,通过删除,替换,插入等操作确定是否是字典集的字
* 是则输出XX is correct不是则进行比对输出,字典中不存在则输出空
* @author AbuGe
*
*/
public class SpellChecker
{
public static void main(String[] args) throws IOException
{
//创建一个字典集和
List
dictionaryList = new ArrayList
(); //创建一个输入字典集 List
inputList = new ArrayList
(); //设置#的开始与结束标记 boolean startFlag = false; boolean endFlag = false; //设置一个统计#个数的标记 int count = 0; //输入一行数据 InputStream in = System.in; InputStreamReader isr = new InputStreamReader(in); BufferedReader bufr = new BufferedReader(isr); String line = null; while(!startFlag || !endFlag) { line = bufr.readLine(); if(line.equals("#")) { count++; } if(count == 1 && !startFlag) { startFlag = true; continue; } if(count == 2) { endFlag = true; continue; } if(!startFlag) { dictionaryList.add(line); } if(startFlag) { inputList.add(line); } } //待检查的List集合的迭代器 ListIterator
inputIterator = inputList.listIterator(); while(inputIterator.hasNext()) { String input = inputIterator.next(); StringBuilder sb = new StringBuilder(); if(dictionaryList.contains(input)) { System.out.println(input + " is correct"); }else { ListIterator
dictionaryIterator = dictionaryList.listIterator(); char[] inputTemp = input.toCharArray(); sb.append(input); sb.append(":"); while(dictionaryIterator.hasNext()) { String dictionary = dictionaryIterator.next(); char[] dictionaryTemp = dictionary.toCharArray(); boolean replaceFlag = replace(inputTemp, dictionaryTemp); boolean deleteFlag = delete(inputTemp, dictionaryTemp); boolean addFlag = add(inputTemp, dictionaryTemp); if(replaceFlag || deleteFlag || addFlag) { sb.append(" "); sb.append(dictionary); } } String result = sb.toString(); System.out.println(result); } } } //1、替代一位 public static boolean replace(char[] input, char[] dictionary) { //统计不同的字母数 int dif = 0; if(input.length == dictionary.length) { for(int i = 0, j = 0; i < input.length;) { if(input[i++] != dictionary[j++]) dif++; } if(dif > 1) return false; return true; }else { return false; } } //2、删除一位 public static boolean delete(char[] input, char[] dictionary) { int dif = 0; if(input.length - dictionary.length == 1) { for(int i = 0, j = 0; i < input.length && j < dictionary.length;) { if(input[i] != dictionary[j]) { i++; dif++; if(dif > 1) return false; }else { i++; j++; } } return true; }else { return false; } } //3、添加一位 public static boolean add(char[] input, char[] dictionary) { int dif = 0; if(dictionary.length - input.length == 1) { for(int i = 0, j = 0; j < dictionary.length && i < input.length;) { if(input[i] != dictionary[j]) { dif++; j++; if(dif > 1) { return false; } }else { i++; j++; } } return true; }else { return false; } } }