qq_39301527 2017-10-24 01:09 采纳率: 100%
浏览 1293
已采纳

下标越界求解 arr1越界

public void getAllDatas(){
String address="http://nba.sports.sina.com.cn/league_order1.php";
try {
URL url=new URL(address);
try {
InputStream inputStream=url.openStream();
InputStreamReader inputStreamReader=new InputStreamReader(inputStream,"gbk");
BufferedReader reader=new BufferedReader(inputStreamReader);
String rankRegEx = ">\d{1,2}";// 排名正则
String teamRegEx = ">[^<>]*";// 队名正则
String dataRegEx = ">\d{1,3}(\.)\d{0,2}";// 正常数据正则
String percentRegEX = ">\d{1,2}(\.)*(\d)*%";// 百分比数据
GetRegExData regExData=new GetRegExData();
String temp= "";//存放临时数据
int flag=0;
String tempRank = "";// 存放匹配到的返回数据
String tempTeam = "";// 存放匹配到的返回数据
String tempData = "";
String tempPercent = "";
Listlist=new ArrayList();
Mysql mysql=new Mysql();
while ((temp=reader.readLine())!=null){
//匹配排名
if ((tempRank = regExData.getData(rankRegEx, temp)) != "") {
tempRank = tempRank.substring(1, tempRank
.indexOf(""));
// System.out.println("排名:" + tempRank);
list.add(tempRank);
flag++;
}
// 匹配球队
// 由于该正则会匹配到其他地方的数据,需给它一个标识符,让它从"找到排名位置"才开始匹配
if ((tempTeam = regExData.getData(teamRegEx, temp)) != ""
&& flag == 1) {
tempTeam = tempTeam.substring(1, tempTeam
.indexOf(""));
// System.out.println("球队名称:" + tempTeam);
list.add(tempTeam);
flag = 0;
}
// 匹配正常数据
if ((tempData = regExData.getData(dataRegEx, temp)) != "") {
tempData = tempData.substring(1, tempData
.indexOf(""));
// System.out.println(tempData);
list.add(tempData);

                    }
                    // 匹配百分比数据
                    if ((tempPercent = regExData.getData(percentRegEX, temp)) != "") {
                        tempPercent = tempPercent.substring(1, tempPercent
                                .indexOf("</span></td>"));
                        // System.out.println(tempPercent);
                        list.add(tempPercent);
                    }

                }
                reader.close();
                Object[] arr = list.toArray();// 将集合转换为数组
                int a = -15;
                int b = 0;
                String sql = "insert into data(rank,team,win,lose,winpercent,windifferent,score,losescore,scoredifferent,host,out,part,square,recent,winplus)values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
                for (int i = 0; i <30; i++) {
                    a += 15;
                    b += 15;
                    if (b <=450) {
                        Object[] arr1 = Arrays.copyOfRange(arr, a, b);
                        mysql.insertNewData(sql, arr1);
                        System.out.println("正在采集数据..当前采集数据:" + (i + 1) + "条");
                    }
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
  • 写回答

5条回答 默认 最新

  • DS623089578 2017-10-24 03:02
    关注

    首先对这个方法进行一个解析:
    copyOfRange(T[] original, int from, int to) :这个方法的意思是从original数组中拷贝从第from位至第to位的元素,返回一个新数组。
    1、如果拷贝的范围超过original的返回,返回的将是某数组类型的初始值,例如,int类型的数组初始值是0,对象类型的初始值是null等,
    2、这个方法内部实现是创建是依据传入的to - from得来的长度,创建的一个新生数组,在拷贝的时候只是将数组的对应位拷贝进数组
    图片说明
    下面类分析一个这个问题错误的根源在哪里:
    图片说明
    主要的问题是出现在循环语句的i++上面,也就是循环次数上,具体的解法我已经在下面给出了代码,请参考。

    题主的意思,就是想拷贝数组的制定长度作为sql的参数:那么可以有一下的一个方案:
      Object[] iArr = new Object[10];
        for (int i = 0; i < iArr.length; i++) {
            iArr[i] = i;
        }
        //计算拆分成每份五个元素需要循环几次
        int times = (int) Math.ceil(iArr.length / 3.0);
        int start = 0;
        int end = 0;
        for (int i = 0; i < times; i++) {
            start = i * 3;
            end = 3 * (i + 1);
            if(end > iArr.length) {
                end = iArr.length;
            }
            Object [] arr = Arrays.copyOfRange(iArr, start, end);
            System.out.println(Arrays.toString(arr));
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛