您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

如何用Java实现简单聊天机器人

2024/4/21 9:40:53发布19次查看
创建数据库和表,准备表数据(mysql)
首先创建一个数据库android
然后创建一个表dictionary,字段:
id int
receive varchar(100)
response varchar(100)
receive 表示受到的信息
response 表示回应的信息
create database android;use android;create table dictionary(   id int auto_increment,   receive varchar(100),   response varchar(100),   primary key (id))  default charset=utf8;insert into dictionary values(null,'你好','好你妹!');insert into dictionary values(null,'你叫什么','你想泡我啊?');insert into dictionary values(null,'你叫什么','同志,不约');insert into dictionary values(null,'打你哦','来啊,来打我啊');
对象设置(orm)
对象关系映射,设置对象对应数据库中的各字段。
package socket;public class dictionary {    public int id;    public string receive;  // 接收    public string response; // 回应}
数据访问对象(dao)
package socket;import java.sql.connection;import java.sql.drivermanager;import java.sql.preparedstatement;import java.sql.resultset;import java.sql.sqlexception;import java.util.arraylist;import java.util.list;public class dictionarydao {    public dictionarydao() {        try {            class.forname(com.mysql.jdbc.driver);        } catch (classnotfoundexception e) {            e.printstacktrace();        }    }    public connection getconnection() throws sqlexception {        return drivermanager.getconnection(jdbc:mysql://127.0.0.1:3306/android?characterencoding=utf-8, root,                admin);    }    public list<dictionary> query(string recieve) {        list<dictionary> ds = new arraylist<dictionary>();        string sql = select * from dictionary where receive = ? ;        try (connection c = getconnection(); preparedstatement ps = c.preparestatement(sql);) {            ps.setstring(1, recieve);            resultset rs = ps.executequery();            while (rs.next()) {                dictionary d = new dictionary();                int id = rs.getint(1);                string receive = rs.getstring(receive);                string response = rs.getstring(response);                d.id = id;                d.receive = receive;                d.response = response;                ds.add(d);            }        } catch (sqlexception e) {            e.printstacktrace();        }        return ds;    }}
此处,如果不是代码编写问题,出现jdbc错误,请注意是否打开mysql数据库。
server端
主要是正常的socket入门编程。
通过输入流收到client端发来的数据(打印),然后查询语料对话库,查到返回正常对话,查不到表示听不懂。
package socket;import java.io.datainputstream;import java.io.dataoutputstream;import java.io.ioexception;import java.io.inputstream;import java.io.outputstream;import java.net.serversocket;import java.net.socket;import java.util.arraylist;import java.util.collections;import java.util.list;public class server {    private static list<string> cannotunderstand= new arraylist<>();    static{        cannotunderstand.add(听求不懂啊);        cannotunderstand.add(说人话);        cannotunderstand.add(再说一遍?);        cannotunderstand.add(大声点);        cannotunderstand.add(老子在忙,一边玩儿去);    }    public static void main(string[] args) {        try {            serversocket ss = new serversocket(8888);            system.out.println(监听在端口号:8888);            socket s = ss.accept();            inputstream is = s.getinputstream();            datainputstream dis = new datainputstream(is);            outputstream os = s.getoutputstream();            dataoutputstream dos = new dataoutputstream(os);            while (true) {                string msg = dis.readutf();                system.out.println(msg);                list<dictionary> ds= new dictionarydao().query(msg);                string response = null;                if(ds.isempty()){                    collections.shuffle(cannotunderstand);                    response = cannotunderstand.get(0);                }                else{                    collections.shuffle(ds);                    response = ds.get(0).response;                }                dos.writeutf(response);            }        } catch (ioexception e) {            // todo auto-generated catch block            e.printstacktrace();        }    }}
client端
正常的收发信息
package socket;import java.io.datainputstream;import java.io.dataoutputstream;import java.io.ioexception;import java.io.inputstream;import java.io.outputstream;import java.net.socket;import java.net.unknownhostexception;import java.util.scanner;public class client {    public static void main(string[] args) {        try {            // 连接到本机的8888端口            socket s = new socket(127.0.0.1, 8888);            //            outputstream os = s.getoutputstream();            dataoutputstream dos = new dataoutputstream(os);            inputstream is = s.getinputstream();            datainputstream dis = new datainputstream(is);            while (true) {                scanner sc = new scanner(system.in);                string str = sc.next();                dos.writeutf(str);                string msg = dis.readutf();                system.out.println(msg);            }        } catch (unknownhostexception e) {            e.printstacktrace();        } catch (ioexception e) {            e.printstacktrace();        }    }}
以上就是如何用java实现简单聊天机器人的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product