王爱沉 2015-12-08 14:11 采纳率: 4.3%
浏览 5187

java 程序运行出现String index out of range: -1异常请各位大神指教

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)

  • 写回答

1条回答 默认 最新

  • 阳仔928 2015-12-08 14:29
    关注

    感觉这个问题应该是数组下标越界吧!没有具体看你的代码主要是根据你的报错信息猜的!仅供参考

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)