POJ1035 Spell checker

2014-11-24 12:38:46 · 作者: · 浏览: 0

\\

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; } } }