编程实现一个命令窗程序能进行郑码查询
打开小小输入法的郑码表观察,如
a 一
aa 一下
aaam 万无一失
aaav 可歌可泣
aaax 天下无难事
aacf 百无聊赖
aacm 无可奉告
aadj 无可挽回
aadt 殊死搏斗
aaeu 平型关
aaez 一开始
。。。
改造上次你已完成的“编程实现一个命令窗程序,使得输入“你”则在屏上回显“you”的那个程序”,使得能进行郑码查询,如输入aacm,则输出“无可奉告”。以如下两种方法:
1)将码表放在一个文本文件中,如zmb.txt中,实现以上功能。
2)将码表放在SQLite文件中,如zmdb. sqlite, 再次以上功能。
将码表放在一个文本文件中,如zmb.txt中,实现以上功能
zmb.txt文件:
源程序为:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class testzmb {
public static void main(String[] args) throws IOException {
while(true) {
System.out.print("Please input :");
Scanner sa=new Scanner(System.in); //定义scanner,等待输入
String a=sa.next(); //读取输入的字符放入a中
if("ByeBye".equalsIgnoreCase(a)) {//equalsIgnoreCase( )方法用来比较字符串不区分大小写,equals( )方法用来比较字符串需要区分大小写
System.exit(0);//退出程序的执行
}
File f=new File("E:\\yb\\zmb.txt");//创建了一个File对象
FileReader fre=new FileReader(f);//FileReader字符输入流读文件
BufferedReader bre=new BufferedReader(fre);//用BufferedReader来进行数据流读取的
String str="";//定义一个指向首元素为0的字符数组
boolean flag=false;//定义flag用于标志是否找到
while((str=bre.readLine())!=null)//判断最后一行不存在,为空
{
String chinese=str.substring(str.indexOf("<")+1,str.indexOf(">"));//substring(起始坐标,结束坐标),indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置,从前往后查。
String zm=str.substring(str.lastIndexOf("<")+1,str.lastIndexOf(">"));//lastIndexOf() 方法可返回某个指定的字符串值在字符串中最后一次出现的位置,从后往前查。
if(chinese.equalsIgnoreCase(a)) {//用输入的字符与文件里面的中文字符进行比对
System.out.println("This is zm:"+zm); //输出英文
flag=true;//标志找到
}
}
if(flag==false) {//没有找到
System.out.println("The word can't be found!");
}
bre.close();//关闭流
fre.close();
}
}
}
实现的效果为:
将码表放在SQLite文件中,如zmdb. sqlite, 再次以上功能。
创建一个郑码表在SQLite数据库中,如图所示:
向创建的郑码表中添加数据,如图所示:
使用java编程语言连接到SQLite数据库,代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectSQLite {
/**
* Connect to a sample database
*/
public static void connect() {
Connection conn = null;
try {
// db parameters
String url = "jdbc:sqlite:D:/sqlite/test.db";
// create a connection to the database
conn = DriverManager.getConnection(url);
System.out.println("Connection to SQLite has been established.");
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
}
/**
* @param args
* the command line arguments
*/
public static void main(String[] args) {
connect();
}
}
连接好数据库后,对郑码进行操作,代码如图所示:
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class SelectRecords {
private Connection connect() {
// SQLite connection string
String url = "jdbc:sqlite:D:/sqlite/test.db";
Connection conn = null;
try {
conn = DriverManager.getConnection(url);
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return conn;
}
public void selectAll() {
while(true) {
System.out.print("Please input :");
Scanner sa=new Scanner(System.in); //定义scanner,等待输入
String a=sa.next(); //读取输入的字符放入a中
if("ByeBye".equalsIgnoreCase(a)) {//equalsIgnoreCase( )方法用来比较字符串不区分大小写,equals( )方法用来比较字符串需要区分大小写
System.exit(0);//退出程序的执行
}
String sql = "SELECT * FROM zmdb";
try {
Connection conn = this.connect();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
boolean flag=false;//定义flag用于标志是否找到
while (rs.next()) {
String zm=rs.getString("zm");
String chinese=rs.getString("chinese");
if(zm.equalsIgnoreCase(a)) {//用输入的字符与文件里面的中文字符进行比对
System.out.println("This is chinese:"+chinese);
flag=true;//标志找到
}
}
if(flag==false) {//没有找到
System.out.println("The word can't be found!");
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}
/**
* @param args
* the command line arguments
*/
public static void main(String[] args) {
SelectRecords app = new SelectRecords();
app.selectAll();
}
}
实现的效果图为: