亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? spellchecker.java

?? 實現電子詞典功能 找不到匹配單詞時給出最接近的單詞
?? JAVA
字號:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class spellChecker extends JFrame
implements  KeyListener, ActionListener, ListSelectionListener 
{
	private JTextField jtf=new JTextField();
	private static JList list=new JList();
	private static JTextArea jta=new JTextArea();
	private JButton button =new JButton(" 查詢 ");
	private JScrollPane scrollPane1=new JScrollPane(list);
	
	private static Vector wordVector=new Vector();		//存放英語單詞的向量
	private static int[] searchIndex=new int[27];			//一級索引
	private static Vector matchWordIndex=new Vector();		//存放找到的參考單詞所在向量中的位置
	public spellChecker()
	{
		Container container =getContentPane();
		container.setLayout(new BorderLayout());
		
		JPanel jp1=new JPanel();
		jp1.setLayout(new BorderLayout());
		
		jp1.add(new JLabel(" 輸入 "),BorderLayout.WEST);
		jp1.add(jtf,BorderLayout.CENTER);
		jp1.add(button,BorderLayout.EAST);
		container.add(jp1,BorderLayout.NORTH);
		container.add(scrollPane1,BorderLayout.WEST);
		
		JScrollPane scrollPanel2=new JScrollPane(jta);
		jta.setEditable(false);
		container.add(scrollPanel2,BorderLayout.CENTER );
		
		list.addListSelectionListener(this);
		button.addActionListener(this);
		jtf.addKeyListener(this);
	}

	public static void main(String[] args)
	{
		try 
		{
			addDictionary();
		} catch (IOException e) 
		{
			e.printStackTrace();
		}
		spellChecker checkerFrame=new spellChecker();
		checkerFrame.pack();
		checkerFrame.setTitle("SPELL  CHECKER");
		checkerFrame.setSize(600,500);
		Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
		int screenWidth = screenSize.width;
		int screenHeight = screenSize.height;
		
		Dimension frameSize=checkerFrame.getSize();
		int x=(screenWidth-frameSize.width)/2;
		int y=(screenHeight-frameSize.height)/2;
		checkerFrame.setLocation(x,y);
		checkerFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		checkerFrame.setVisible(true);
	}

	public void keyPressed(KeyEvent e) 
	{
		// TODO Auto-generated method stub
		
	}

	public void keyReleased(KeyEvent e) 
	{
		// TODO Auto-generated method stub
		int key=e.getKeyCode();
		//System.out.println("KeyTyped :"+ key);
		if(key==KeyEvent.VK_ENTER)		//輸入完后按回車查詢單詞
		{
			String str=jtf.getText().trim();
			if(str.length()>0)
			{
				int index=search(str);
				jta.setText("");
				if(index==-1)
				{
					jta.append("單詞拼寫錯誤\n");
					matchWordIndex.removeAllElements();
					giveWords(str);			//查找可能的與輸入相近的單詞
					if(matchWordIndex.size()>0)		
					{
						jta.append("拼寫校正 你要輸入的單詞是不是:\n");
						for (int i=0;i<matchWordIndex.size();i++)
						{
							Integer integerObject=(Integer)(matchWordIndex.elementAt(i));
							int matchIndex=integerObject.intValue();
							jta.append(wordVector.elementAt(matchIndex)+"      "+getExplanation(matchIndex)+"\n");
						}
					}
					else
						jta.append("找不到與你輸入相近的單詞\n");
				}
				else 
				{
					String  explanation=new String(getExplanation(index));
					jta.append(explanation+"\n");
				}
				//jtf.setText("");
			}
		}
		if(key==KeyEvent.VK_DELETE)		//按DELETE鍵
		{
			String str=jtf.getText().trim();
			if(str.length()>0)
			{
				int index=perSearch(str);
				System.out.println(index);
				list.setSelectedIndex(index);
				scrollPane1.getVerticalScrollBar().setValue(index*20);
			}
		}
		else if(key==KeyEvent.VK_DOWN)	//按down鍵
		{
			int index=list.getSelectedIndex();
			index++;
			list.setSelectedIndex(index);
			scrollPane1.getVerticalScrollBar().setValue(index*20);
			jtf.setText((String) wordVector.elementAt(index));
		}
		else if(key==KeyEvent.VK_UP)  	//按up鍵
		{
			int index=list.getSelectedIndex();
			index--;
			list.setSelectedIndex(index);
			scrollPane1.getVerticalScrollBar().setValue(index*20);
			jtf.setText((String) wordVector.elementAt(index));
		}
		else
		{
			String str=jtf.getText().trim();
			if(str.length()>0)
			{
				int index=perSearch(str);
				System.out.println(index);
				list.setSelectedIndex(index);
				scrollPane1.getVerticalScrollBar().setValue(index*20);
			}
		}
	}

	public void keyTyped(KeyEvent e) 
	{
		// TODO Auto-generated method stub
	}

	public void actionPerformed(ActionEvent e) 
	{
		// TODO Auto-generated method stub
		if(e.getSource()==button)		//輸入完后按查詢按鈕查詢單詞
		{
			String str=jtf.getText().trim();
			if(str.length()>0)
			{
				int index=search(str);
				jta.setText("");
				if(index==-1)
				{
					jta.append("單詞拼寫錯誤\n");
					giveWords(str);
					if(matchWordIndex.size()>0)
					{
						jta.append("拼寫校正 你要輸入的單詞是不是:\n");
						for (int i=0;i<matchWordIndex.size();i++)
						{
							Integer integerObject=(Integer)(matchWordIndex.elementAt(i));
							int matchIndex=integerObject.intValue();
							jta.append(wordVector.elementAt(matchIndex)+"      "+getExplanation(matchIndex)+"\n");
						}
					}
					else
						jta.append("找不到與你輸入相近的單詞\n");
				}
				else 
				{
					String  explanation=new String(getExplanation(index));
					jta.append(explanation+"\n");
				}
				//jtf.setText("");
			}
		}
	}

	public void valueChanged(ListSelectionEvent arg0) 
	{
		// TODO Auto-generated method stub
		int index=list.getSelectedIndex();
		System.out.println(index);
		//jtf.setText((String) wordVector.elementAt(index));
		String  explanation=new String(getExplanation(index));
		jta.setText("");
		jta.append(explanation+"\n");
	}
	
	
	public static void addDictionary() throws IOException
	{
		//	TODO 將英文字典讀入,同時建立一級索引
		BufferedReader wordFile=null;
		String inLine;
		try
		{
			wordFile=new BufferedReader(new FileReader("wordList.txt"));
			
			searchIndex[0]=0;		//a的起始位置
			int index=1;
			while((inLine=wordFile.readLine())!=null)
			{
				wordVector.add(inLine);		//將讀入的單詞存放在向量中
				char ch=inLine.charAt(0);
				if(ch<'Z'&&ch >'A')			//如果首字母是大寫,將其轉換為小寫,便于處理
					ch=(char)((int)ch-'A'+'a');
				if((int)ch-97-index==0)		//同時建立一級索引
				{
					searchIndex[index]=wordVector.size()-1;
					index++;
				}
				
			}
			list=new JList(wordVector);
			searchIndex[26]=wordVector.size()-1;
		}
		catch(FileNotFoundException ex)
		{
			System.out.println("File not found :");
		}
		finally
		{
			try 
			{
				if(wordFile!=null)
					wordFile.close();
			}
			catch (IOException ex)
			{
				System.out.println(ex.getMessage());
			}
		}
		
	}
	
	public static String getExplanation(int index)
	{
		//TODO 顯示英文單詞所對應的中文解釋
		BufferedReader explanationFile = null;
		String explanation="";
		try
		{
			explanationFile=new BufferedReader(new FileReader("explanationList.txt"));
			for(int i=0;i<=index;i++)
			explanation=explanationFile.readLine();
			
		}
		catch(IOException ex)
		{
			System.out.println("Error:"+ex);
		}
		finally
		{
			try 
			{
				if(explanationFile!=null)
					explanationFile.close();
			}
			catch (IOException ex)
			{
				System.out.println(ex.getMessage());
			}
		}
		int i=0;
		while(explanation.charAt(i)!='$')
			i++;
		explanation=explanation.substring(i+1);
		return explanation;
	}
	
	public int search (String str)	
	{
		//TODO 查找,采用一級索引加二分查找法,若找到,返回該單詞所在向量的位置;找不到,返回-1
		char ch=str.charAt(0);
		if(ch<'Z'&&ch >'A')
			ch=(char)((int)ch-'A'+'a');
		int head=searchIndex[(int)ch-97];
		int tail=searchIndex[(int)ch-96];
		return binarySearch(str, wordVector, head, tail-1);
		
	}
	
	public int binarySearch(String str,Vector vector,int head ,int tail)	
	{
		//TODO 遞歸二分查找法
			if((tail-head)==1)
			{
				if(((String)wordVector.elementAt(head)).equals(str))
					return head;
				else if(((String)wordVector.elementAt(tail)).equals(str))
					return tail;
				else 
					return -1;
			}
			else
			{
				int mid=(head+tail)/2;
				int result=((String)wordVector.elementAt(mid)).compareToIgnoreCase(str);
				if(result<0)
					return binarySearch(str,wordVector,mid,tail);
				else if(result>0)
					return binarySearch(str,wordVector,head,mid);
				else
				return mid;
			}
		
	}
	
	public int perSearch(String str)		
	{
		//TODO 聯想搜索
		char ch=str.charAt(0);
		if(ch<'Z'&&ch >'A')
			ch=(char)((int)ch-'A'+'a');
		
		int head=searchIndex[(int)ch-97];
		int tail=searchIndex[(int)ch-96];
		return binaryPerSearch(str, wordVector, head, tail-1);
	}
	
	public int binaryPerSearch(String str,Vector vector,int head ,int tail)		
	{
		//TODO 聯想二分查找
		if((tail-head)==1)
		{
			if(((String)wordVector.elementAt(head)).equals(str))
				return head;
			else if(((String)wordVector.elementAt(tail)).equals(str))
				return tail;
			else 
			{
				int result=((String)wordVector.elementAt(head)).compareToIgnoreCase(str);
				if(result<0)
					return tail;
				else 
					return head;
			}
		}
		else
		{
			int mid=(head+tail)/2;
			int result=((String)wordVector.elementAt(mid)).compareToIgnoreCase(str);
			if(result<0)
				return binaryPerSearch(str,wordVector,mid,tail);
			else if(result>0)
				return binaryPerSearch(str,wordVector,head,mid);
			else
			return mid;
		}
	}
	
	public void giveWords(String str)
	{
		//TODO 給出參考的單詞序列
		insertLetter(str);
		deleteLetter(str);
		changeLetter(str);
		swapLetter(str);
	}
	
	public void insertLetter(String str)
	{
		//TODO 在給定的字符串中插入一個字母,看能不能找到正確的單詞
		char[] tempStr=str.toCharArray();
		
		for (int i=1;i<str.length()+1;i++)
		{
			for (int ch=(int)'a';ch<=(int)'z';ch++)
			{
				String newStr=new String (insertChar(tempStr,i,(char)ch));	//在字符串的第i個位置插入字母ch
				int index=search(newStr);
				if(index!=-1)
					if(matchWordIndex.indexOf(new Integer(index))==-1)		
					matchWordIndex.addElement(new Integer(index));
			}
		}
	}
	
	public void deleteLetter(String str)
	{
		//TODO 刪除給定的字符串中的一個字母,看能不能找到正確的單詞
		char[] tempStr=str.toCharArray();
		
		for (int i=1;i<str.length();i++)
		{
				String newStr=new String (deleteChar(tempStr,i));	//刪除第i個字母
				int index=search(newStr);
				if(index!=-1)
					if(matchWordIndex.indexOf(new Integer(index))==-1)
					matchWordIndex.addElement(new Integer(index));
		}
		
	}
	
	public void changeLetter(String str)
	{
		//TODO 替換給定字符串中的一個字母,看能不能找到正確的單詞
		char[] tempStr=str.toCharArray();
		
		for (int i=1;i<str.length();i++)
		{
			for (int ch=(int)'a';ch<=(int)'z';ch++)
			{
				String newStr=new String (changeChar(tempStr,i,(char)ch));	//將字符串的第i個位置替換為字母ch
				int index=search(newStr);
				if(index!=-1)
					if(matchWordIndex.indexOf(new Integer(index))==-1)
					matchWordIndex.addElement(new Integer(index));
			}
		}
	}
	
	public void swapLetter(String str)
	{
		//TODO 交換單詞中的字母,看能不能找到正確的單詞
		
		char[] tempStr=str.toCharArray();
		
		for (int i=1;i<str.length()-1;i++)   //交換相鄰的兩個字母
		{
				String newStr=new String (swapNeighbour(tempStr,i));	//交換字符串的第i個位置與第i+1個位置的字母
				int index=search(newStr);
				if(index!=-1)
					if(matchWordIndex.indexOf(new Integer(index))==-1)
					matchWordIndex.addElement(new Integer(index));
		}
		
		for(int i=0;i<str.length()-2;i++)	//交換相隔的兩個字母
		{
			String newStr=new String (swapApart(tempStr,i));	//交換字符串的第i個位置與第i+2個位置的字母
			int index=search(newStr);
			if(index!=-1)
				if(matchWordIndex.indexOf(new Integer(index))==-1)
				matchWordIndex.addElement(new Integer(index));
		}
	}
	
	public char[] insertChar(char[] charStr,int location,char ch)
	{
		//TODO 將給定字符插入給定字符串的給定位置
		char[] temp=new char[charStr.length+1];
		for(int i=0;i<charStr.length+1;i++)
		{
			if(i<location)
				temp[i]=charStr[i];
			else if(i==location)
				temp[i]=ch;
			else
				temp[i]=charStr[i-1];
		}
		return temp;
		
		
	}
	
	public char[] deleteChar(char[] charStr,int location)
	{
		//TODO 將給定位置的字符刪除
		char[] temp=new char[charStr.length-1];
		for(int i=0;i<charStr.length-1;i++)
		{
			if(i<location)
				temp[i]=charStr[i];
			else
				temp[i]=charStr[i+1];
		}
		return temp;
	}
	
	public char[] changeChar(char[] charStr,int location,char ch)
	{
		//TODO 將給定位置的字符替換為給定字符
		char[] temp=new char[charStr.length];
		for(int i=0;i<charStr.length;i++)
		{
			if(i==location)
				temp[i]=ch;
			else
				temp[i]=charStr[i];
		}
		return temp;
		
		
	}
	
	public char[] swapNeighbour(char[]charStr,int location)
	{
		//TODO 將給定位置的字母與其后一個字母互換
		char[] temp=new char[charStr.length];
		for(int i=0;i<charStr.length;i++)
		{
			if(i==location)
				temp[i]=charStr[i+1];
			else if(i==location+1)
				temp[i]=charStr[i-1];
			else
				temp[i]=charStr[i];
		}
		return temp;
	}
	public char[] swapApart(char[]charStr,int location)
	{
		//TODO 將給定位置的字母與其后第二個字母互換
		char[] temp=new char[charStr.length];
		for(int i=0;i<charStr.length;i++)
		{
			if(i==location)
				temp[i]=charStr[i+2];
			else if(i==location+2)
				temp[i]=charStr[i-2];
			else
				temp[i]=charStr[i];
		}
		return temp;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91亚洲资源网| 亚洲国产激情av| 国产欧美日韩视频一区二区| 亚洲日本在线a| 久久精品国产亚洲5555| 欧美视频在线播放| 中文字幕亚洲区| 久久精品99国产精品日本| 精品视频一区三区九区| 中文字幕精品—区二区四季| 972aa.com艺术欧美| 久久亚洲精品小早川怜子| 日韩电影在线一区二区三区| 91老司机福利 在线| 国产午夜精品一区二区三区嫩草 | 久久免费视频一区| 天堂资源在线中文精品| 91视视频在线观看入口直接观看www| 欧美成人精品1314www| 日韩高清在线不卡| 欧美精品 国产精品| 洋洋av久久久久久久一区| 99在线视频精品| ...中文天堂在线一区| 成人黄色av电影| 国产精品色一区二区三区| 岛国一区二区三区| 国产亚洲精品精华液| 国产精品亚洲а∨天堂免在线| ww久久中文字幕| 国产馆精品极品| 国产精品色呦呦| 99久久综合99久久综合网站| 国产精品久久综合| www.亚洲色图.com| 亚洲精品中文在线观看| 色婷婷激情一区二区三区| 亚洲黄色免费网站| 在线免费观看一区| 日韩电影在线观看网站| 日韩欧美国产一区二区三区| 精品一区二区三区久久久| 2019国产精品| 99视频在线精品| 亚洲一区在线视频| 9191久久久久久久久久久| 日本不卡高清视频| 久久久蜜桃精品| av网站免费线看精品| 亚洲影院在线观看| 欧美一区二区三区视频免费 | 亚洲国产va精品久久久不卡综合| 欧美日韩亚洲综合在线| 另类综合日韩欧美亚洲| 国产精品视频在线看| 一本大道久久a久久精品综合| 亚洲大尺度视频在线观看| 日韩午夜激情电影| 成人av在线网| 亚洲国产一区在线观看| 精品va天堂亚洲国产| 国产99精品在线观看| 亚洲美女区一区| 日韩免费成人网| 99久久精品免费看国产| 亚洲成人1区2区| 久久精品视频网| 欧美专区亚洲专区| 国产一区二区三区黄视频| 美女视频黄a大片欧美| 国产精品久久久久久福利一牛影视 | 91蜜桃网址入口| 蜜桃精品视频在线观看| 亚洲男人的天堂网| 精品91自产拍在线观看一区| 91国产丝袜在线播放| 国产在线国偷精品免费看| 亚洲综合成人网| 国产欧美一区二区精品久导航| 欧亚洲嫩模精品一区三区| 国产精品一二三四区| 亚洲1区2区3区4区| 亚洲欧美综合在线精品| 精品剧情v国产在线观看在线| 色噜噜狠狠成人网p站| 国产91精品久久久久久久网曝门 | 亚洲精品国产a久久久久久| 欧美成人激情免费网| 欧美性色黄大片手机版| 粉嫩一区二区三区在线看| 日本欧美一区二区三区乱码| 亚洲欧美国产毛片在线| 久久精品男人天堂av| 日韩一区二区高清| 欧美日韩国产美| 在线免费观看日本一区| 99视频国产精品| 国产黄人亚洲片| 国产中文字幕一区| 久久精品理论片| 日韩av二区在线播放| 夜夜嗨av一区二区三区四季av| 亚洲欧洲99久久| 亚洲欧洲精品一区二区三区不卡| 久久品道一品道久久精品| 日韩免费性生活视频播放| 日韩一区二区高清| 日韩视频免费观看高清完整版在线观看 | 国产美女精品一区二区三区| 美女高潮久久久| 日韩av电影免费观看高清完整版 | 九九国产精品视频| 久久av资源站| 美国十次了思思久久精品导航| 污片在线观看一区二区| 午夜影院久久久| 亚洲成人av资源| 日韩精品电影一区亚洲| 亚洲成av人在线观看| 亚洲国产另类精品专区| 婷婷综合在线观看| 奇米色一区二区| 久久99精品久久久久久国产越南 | 97se亚洲国产综合自在线不卡| av成人动漫在线观看| 久久综合久久99| 久久久精品天堂| 国产精品剧情在线亚洲| 一区二区三区中文字幕| 亚洲图片欧美一区| 日韩高清不卡一区二区三区| 日韩精品五月天| 九一久久久久久| 国产成人精品一区二区三区网站观看| 国产91丝袜在线18| 色欧美日韩亚洲| 91精品国产丝袜白色高跟鞋| 精品女同一区二区| 欧美激情自拍偷拍| 亚洲嫩草精品久久| 日韩高清不卡一区| 国产凹凸在线观看一区二区| 91在线观看下载| 8v天堂国产在线一区二区| 久久久久久免费毛片精品| 亚洲免费在线视频一区 二区| 日精品一区二区| 成人av动漫在线| 欧美一区二区三区人| 国产精品沙发午睡系列990531| 亚洲国产另类av| 国产91丝袜在线播放| 9191精品国产综合久久久久久| 国产午夜精品福利| 日韩主播视频在线| 盗摄精品av一区二区三区| 欧美日韩精品免费观看视频 | 国产精品系列在线播放| 在线中文字幕一区| 久久综合狠狠综合久久激情| 亚洲精品国产无套在线观| 精品亚洲porn| 欧美日韩激情一区二区三区| 2021中文字幕一区亚洲| 水野朝阳av一区二区三区| caoporen国产精品视频| xfplay精品久久| 日韩av不卡在线观看| 色婷婷一区二区| 国产欧美一区二区精品婷婷| 麻豆免费精品视频| 欧美性生活影院| 亚洲人成人一区二区在线观看| 极品少妇xxxx精品少妇| 欧美日韩精品欧美日韩精品| 亚洲天堂av一区| 成人免费观看视频| 久久久久国产成人精品亚洲午夜| 手机精品视频在线观看| 欧美四级电影在线观看| 亚洲理论在线观看| 成人精品免费网站| 国产日韩在线不卡| 韩国成人精品a∨在线观看| 777奇米成人网| 午夜电影久久久| 欧美日韩一区二区不卡| 亚洲一区二区三区精品在线| 成人网男人的天堂| 亚洲国产精品高清| 高清不卡一二三区| 中文无字幕一区二区三区| 国产精品亚洲午夜一区二区三区 | 国产成人精品三级麻豆| 亚洲国产成人tv| 欧洲精品中文字幕| 一区二区三区电影在线播| 99re这里只有精品视频首页| 国产精品理伦片| 91一区二区在线|