import java.awt.*;
import javax.swing.*;
import java.sql.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.regex.*;
import java.util.Random;
import static java.awt.BorderLayout.*;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
public class RobotDemo
{
final JTextField jtf=new JTextField(10);
final JTextField jtf1=new JTextField(10);
final JTextField jtf2=new JTextField(10);
Link lk,lk1,lk2,lk3,lk4,lk5;
ResultSet rs ,rs1,rs2,rs3,rs4,rs5;
Statement sta;
String answer,res;
Random r=new Random();
public void init()
{
final JFrame jf=new JFrame();
final JPanel jp=new JPanel();
final JPanel jp1=new JPanel();
final JScrollPane jsp=new JScrollPane(jp);
jsp.setPreferredSize(new Dimension(300,300));
jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
JSplitPane js=new JSplitPane(JSplitPane.VERTICAL_SPLIT,jsp,jp1);
final JPanel jp2=new JPanel();
JButton jb=new JButton("发送");
JButton jb1=new JButton("训练");
JButton jb2=new JButton("确定");
JButton jb3=new JButton("再加一条");
final JDialog jd=new JDialog(jf,"训练");
jf.add(js);
jp1.add(jtf);
jp1.add(jb);
jp1.add(jb1);
jd.add(jp2);
jp2.add(jtf1);
jp2.add(jtf2);
jp2.add(jb3);
jp2.add(jb2);
jb.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String result="";
String s=jtf.getText();
if(s.equals(""))
{
JOptionPane.showMessageDialog(null, "不能添加空白内容");
}
else if(s.length()<4)
{
result=find(s);
}
else
{
result=find1(s);
}
StringBuffer str=new StringBuffer(s);
int index;
for(index=10;index<str.length();index+=11)
{
str.insert(index,"\n");
}
StringBuffer str1=new StringBuffer(result);
int index1;
for(index1=5;index1<str1.length();index1+=6)
{
str1.insert(index1,"\n");
}
JPanel jp3=new JPanel();
jp3.setPreferredSize(new Dimension(300,50));
JTextPane jta1=new JTextPane();
jta1.setBackground(Color.GREEN);
jp3.setLayout(new FlowLayout(FlowLayout.LEFT));
JPanel jp4=new JPanel();
jp4.setPreferredSize(new Dimension(300,50));
JTextPane jta2=new JTextPane();
jta2.setBackground(Color.GREEN);
jp4.setLayout(new FlowLayout(FlowLayout.RIGHT));
jp.setLayout(new BoxLayout(jp,BoxLayout.Y_AXIS));
jp.add(jp3);
jp.add(jp4);
jp3.add(jta1);
jp4.add(jta2);
jta1.setText(str.toString());
jta2.setText(str1.toString());
}
});
jb2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String question =jtf1.getText();
String answer=jtf2.getText();
try
{
if(question.equals("")&&answer.equals(""))
{
JOptionPane.showMessageDialog(null, "不能添加空白内容");
}
else
{
Statement sta = null;
String sql="insert into chat1 values('" +question+ "','" +answer+"')";
lk=new Link(sql);
lk.sta.executeUpdate(sql);
JOptionPane.showMessageDialog(null, "添加成功");
}
}
catch(Exception a)
{
a.printStackTrace();
JOptionPane.showMessageDialog(null, "添加失败");
}
finally
{
lk.closeConn();
}
jtf1.setText("");
jtf2.setText("");
}
});
jb3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String question =jtf1.getText();
String answer=jtf2.getText();
try
{
if(question.equals("")&&answer.equals(""))
{
JOptionPane.showMessageDialog(null, "不能添加空白内容");
}
else
{
Statement sta = null;
String sql="insert into chat1 values('" +question+ "','" +answer+"')";
lk=new Link(sql);
lk.sta.executeUpdate(sql);
JOptionPane.showMessageDialog(null, "可以再加一条");
}
}
catch(Exception a)
{
a.printStackTrace();
JOptionPane.showMessageDialog(null, "添加失败");
}
finally
{
lk.closeConn();
}
jtf2.setText("");
}
});
jb1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
jd.pack();
jd.setVisible(true);
}
});
jf.pack();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
public String find(String s)
{
String result="";
try
{
String sql="select *from chat";
lk=new Link(sql);
rs=lk.sta.executeQuery(sql);
while(rs.next())
{
String string =new String(rs.getString("question"));
if(string.equals(s)||string.contains(s)||s.contains(string))
{
try
{
String sql1="select * from chat where question='"+string+"'";
lk1=new Link(sql1);
rs1=lk1.sta.executeQuery(sql1);
while(rs1.next())
{
result=new String (rs1.getString("answer"));
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
lk1.closeConn();
}
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
lk.closeConn();
}
if(result.equals(""))
{
int i=3;
int k=r.nextInt(i);
if(k==0)
result="你知道穿山甲说了什么吗";
else if(k==1)
result="呵呵";
else if(k==2)
result="你能说人话吗";
}
return result;
}
public String find1(String s){
Boolean flag=false;
char c[];
int j=0,m=0,max=0;
String result=null,ans="";
String string[]=new String[100];
String regex="[a-zA-Z0-9,。、;‘【】、=-《》?:的“{}——+|) _(*&……%¥#@!~·哦他她你我了吗嘛呢吧 ]";
Pattern p1=Pattern.compile(regex);
Matcher m1=p1.matcher(s);
result=m1.replaceAll("").trim();
c=new char[result.length()];
for(int i=0;i<result.length();i++){
c[i]=result.charAt(i);
}
for(j=0;j<c.length-1;j++){
if(j==0){
try{
String ml="drop table if exists possible";
lk=new Link(ml);
lk.sta.executeUpdate(ml);
String ml1="create table possible(question varchar(60))";
lk1=new Link(ml1);
lk1.sta.executeUpdate(ml1);
}catch(Exception e){
e.printStackTrace();
}
finally{
lk1.closeConn();
lk.closeConn();
}
}
try{
String ml2="select *from chat1";
lk2=new Link(ml2);
rs2=lk2.sta.executeQuery(ml2);
while(rs2.next()){
int i=0;
String str=new String (rs2.getString("question"));
do{
flag=false;
int k=i+1;
int ij=i+j;
if(ij<c.length){
char c1=str.charAt(i);
if(c[ij]==c1&&str.length()==k){
String ml3="insert into possible values('"+str+"')";
lk3=new Link(ml3);
lk3.sta.executeUpdate(ml3);
}
else if(c[ij]==c1&&str.length()!=k){
flag=true;
i++;
}
}
}while(flag);
}
}catch(Exception e2){
e2.printStackTrace();
}
finally{
lk2.closeConn();
if(lk3!=null){
lk3.closeConn();
}
}
}
try{
String ml4="select *from possible";
lk4=new Link(ml4);
rs4=lk4.sta.executeQuery(ml4);
while(rs4.next()){
string[m]=new String(rs4.getString("question"));
m++;
}
if(m!=0){
max=string[0].length();
result=string[0];
for(int k=1;k<=m;k++){
if(max<string[k-1].length()){
result=string[k-1];
max=string[k-1].length();
}
}
String ml5="select *from chat1 where question='"+result+"'";
lk5=new Link(ml5);
rs5=lk5.sta.executeQuery(ml5);
while(rs5.next()){
ans=new String(rs5.getString("answer"));
}
}
else{
int i=4;
int k=r.nextInt(i);
if(k==0){
ans="你要干嘛";
}else if(k==1){
ans="你是外星人吗";
}else if(k==2){
ans="你再这样我不理你了";
}
}
}catch(Exception ea){
ea.printStackTrace();
}
finally{
lk4.closeConn();
if(lk5!=null){
lk5.closeConn();
}
}
if(ans.equals("")){
ans="你TM在逗我吗";
}
return ans;
}
public static void main(String[] args)
{
new RobotDemo().init();
String MUSIC_FILE="相逢一笑.wav";
try
{
AudioInputStream audioInputStream= AudioSystem.getAudioInputStream(new File(MUSIC_FILE));
AudioFormat audioFormat=audioInputStream.getFormat();
DataLine.Info dataLineInfo=new DataLine.Info(SourceDataLine.class,audioFormat,AudioSystem.NOT_SPECIFIED);
SourceDataLine sourceDataLine=(SourceDataLine)AudioSystem.getLine(dataLineInfo);
sourceDataLine.open(audioFormat);
sourceDataLine.start();
int count;
byte tempBuffer[]=new byte[1024];
while ((count = audioInputStream.read(tempBuffer, 0,
tempBuffer.length)) != -1)
{
if(count>0)
{
sourceDataLine.write(tempBuffer,0,count);
}
}
sourceDataLine.drain();
sourceDataLine.close();
}
catch(Exception a)
{
a.printStackTrace();
}
}
}
异常信息
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.charAt(Unknown Source)
at RobotDemo.find1(RobotDemo.java:294)
at RobotDemo$1.actionPerformed(RobotDemo.java:73)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)