Java实现简单聊天机器人

网友投稿 318 2022-10-14


Java实现简单聊天机器人

本文实例为大家分享了java实现简单聊天机器人的具体代码,供大家参考,具体内容如下

整个小案例:整合了Java socket编程、jdbc知识(ORM/DAO)

创建数据库和表,准备表数据(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 query(String recieve) {

List ds = new ArrayList();

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端发来的数据(打印),然后查询语料对http://话库,查到返回正常对话,查不到表示听不懂。

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 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 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(http://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();

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:展锐助力中兴通讯发布5G工业模组ZM9010,使能行业客户数智未来
下一篇:全球首家! 紫光展锐通过TMMi 5级认证
相关文章

 发表评论

暂时没有评论,来抢沙发吧~