最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)簡單聊天機器人

 更新時間:2021年07月04日 10:17:27   作者:大唐雨夜  
這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單聊天機器人,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Java實現(xiàn)簡單聊天機器人的具體代碼,供大家參考,具體內(nèi)容如下

整個小案例:整合了Java socket編程、jdbc知識(ORM/DAO)

創(chuàng)建數(shù)據(jù)庫和表,準備表數(shù)據(jù)(MySQL)

首先創(chuàng)建一個數(shù)據(jù)庫android
然后創(chuàng)建一個表dictionary,字段:

id int
receive varchar(100)
response varchar(100)

receive 表示受到的信息
response 表示回應(yīng)的信息

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,'打你哦','來啊,來打我啊');

對象設(shè)置(ORM)

對象關(guān)系映射,設(shè)置對象對應(yīng)數(shù)據(jù)庫中的各字段。

package socket;

public class Dictionary {
    public int id;
    public String receive;  // 接收
    public String response; // 回應(yīng)
}

數(shù)據(jù)訪問對象(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;
    }
}

此處,如果不是代碼編寫問題,出現(xiàn)jdbc錯誤,請注意是否打開MySQL數(shù)據(jù)庫。

server端

主要是正常的socket入門編程。
通過輸入流收到Client端發(fā)來的數(shù)據(jù)(打?。缓蟛樵冋Z料對話庫,查到返回正常對話,查不到表示聽不懂。

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("監(jiān)聽在端口號: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端

正常的收發(fā)信息

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入理解Spring bean加載順序

    深入理解Spring bean加載順序

    在默認配置下,SpringBean的加載順序主要受到Bean定義順序、依賴關(guān)系和生命周期回調(diào)方法的影響,本文就來了解一下Spring bean加載順序,感興趣的同學(xué)可以學(xué)習(xí)
    2024-10-10
  • Java線程池大小的設(shè)置方法實例

    Java線程池大小的設(shè)置方法實例

    線程池的設(shè)置是有方法的,不是憑借簡單的估算來決定的,這篇文章主要給大家介紹了關(guān)于Java線程池大小的設(shè)置方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • 10分鐘帶你理解Java中的反射

    10分鐘帶你理解Java中的反射

    反射是java中一種強大的工具,能夠使我們很方便的創(chuàng)建靈活的代碼,這篇文章帶大家十分鐘快速理解Java中的反射,有需要的可以參考借鑒。
    2016-08-08
  • Java使用Catcher捕獲異常的實現(xiàn)

    Java使用Catcher捕獲異常的實現(xiàn)

    本文主要介紹了Java使用Catcher捕獲異常的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • JAVALambda表達式與函數(shù)式接口詳解

    JAVALambda表達式與函數(shù)式接口詳解

    大家好,本篇文章主要講的是JAVALambda表達式與函數(shù)式接口詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Spring中HandlerMethod類源碼詳細解析

    Spring中HandlerMethod類源碼詳細解析

    這篇文章主要介紹了Spring中HandlerMethod類源碼詳細解析,HandlerMethod類用于封裝控制器方法信息,包含類信息、方法Method對象、參數(shù)、注解等信息,具體的接口請求是可以根據(jù)封裝的信息調(diào)用具體的方法來執(zhí)行業(yè)務(wù)邏輯,需要的朋友可以參考下
    2023-11-11
  • 去掉IntelliJ IDEA 中 mybatis 對應(yīng)的 xml 文件警告的教程圖解

    去掉IntelliJ IDEA 中 mybatis 對應(yīng)的 xml 文件警告的教程圖解

    本文通過圖文并茂的形式給大家介紹了去掉IntelliJ IDEA 中 mybatis 對應(yīng)的 xml 文件警告的教程,需要的朋友可以參考下
    2018-06-06
  • BigDecimal divide除法除不盡報錯的問題及解決

    BigDecimal divide除法除不盡報錯的問題及解決

    這篇文章主要介紹了BigDecimal divide除法除不盡報錯的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • springboot配置內(nèi)存數(shù)據(jù)庫H2教程詳解

    springboot配置內(nèi)存數(shù)據(jù)庫H2教程詳解

    這篇文章主要介紹了springboot配置內(nèi)存數(shù)據(jù)庫H2的詳細教程,需要的朋友可以參考下
    2017-07-07
  • springboot中的多個application文件講解

    springboot中的多個application文件講解

    這篇文章主要介紹了springboot中的多個application文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論

西畴县| 蒙城县| 资中县| 泉州市| 富顺县| 巴青县| 醴陵市| 噶尔县| 嘉义县| 五常市| 宁津县| 荔波县| 郁南县| 井冈山市| 晴隆县| 吉木萨尔县| 凌源市| 灌云县| 凤台县| 广西| 孟连| 景谷| 永川市| 平江县| 河西区| 南漳县| 金华市| 绿春县| 景德镇市| 静乐县| 唐河县| 合江县| 左贡县| 苗栗县| 京山县| 瓦房店市| 平昌县| 赤城县| 鄂托克前旗| 余江县| 江达县|