【发布时间】:2016-02-02 16:21:54
【问题描述】:
这是我的问题:
-
我有一个从我的 Web 服务返回的 Java 字符串,格式如下:
21,6.417,0.3055714,27,0.7778,0.04761905
-
现在我已经通过使用逗号分隔符的拆分功能将此字符串拆分为单独的字符串。
dataList = Arrays.asList(data.split(","));
-
我需要遍历这个列表并将这些值分配到单独的字符串中,如下所示:
int playsCount = Integer.parseInt(dataList.get(0)); float sumTimeViewed = Float.valueOf(dataList.get(1)); float avgTimeViewed = Float.valueOf(dataList.get(2)); int loadsCount = Integer.parseInt(dataList.get(3)); float loadPlayRatio = Float.valueOf(dataList.get(4)); float avgViewDropOff = Float.valueOf(dataList.get(5)); -
现在在获取值并分配给单个 int 和浮点数时,得到 ArrayIndexOutofBoundsException。这是因为有时列表返回的大小为 4 而不是 6。这是代码:
reportDataList = getReportData(entry.id); //System.out.println("reportDataList.size()"+reportDataList.size()); if(reportDataList.size() >= 1) { for(int i=0;i<reportDataList.size();i++) { if(!reportDataList.get(0).equals("")) { playsCount = Integer.parseInt(reportDataList.get(0)); } if(!reportDataList.get(1).equals("")) { sumTimeViewed = Float.valueOf(reportDataList.get(1)); } if(!reportDataList.get(2).equals("")) { avgTimeViewed = Float.valueOf(reportDataList.get(2)); } if(!reportDataList.get(3).equals("")) { loadsCount = Integer.parseInt(reportDataList.get(3)); } if(!reportDataList.get(4).equals("")) { loadPlayRatio =Float.valueOf(reportDataList.get(4)); } if(!reportDataList.get(5).equals("")) { avgViewDropOff = Float.valueOf(reportDataList.get(5)); } } }
这里是 getReportData 方法:
private List<String> getReportData(String id) throws KalturaApiException {
List<String> headerList = null;
List<String> dataList = new ArrayList<String>();
ReportService reportService = client.getReportService();
ReportType reportType = ReportType.TOP_CONTENT;
ReportInputFilter reportInputFilter = new ReportInputFilter();
reportInputFilter.fromDate = 1390156200;
reportInputFilter.toDate = 1453660200;
ReportTotal reportTotal = reportService.getTotal(reportType, reportInputFilter, id);
String data = reportTotal.data;
if(data != null) {
dataList = Arrays.asList(data.split(","));
}
if(dataList.size() >= 1) {
System.out.println("dataList.size() ------->"+dataList.size());
}
return dataList;
}
对于任何可接受的列表大小,如何解决此问题?
提前致谢 拉吉
【问题讨论】:
-
"有时列表返回的大小为 4 而不是 6";嗯,有你的解释。您还需要了解什么?
-
好的,然后检查尺寸并相应地处理?
-
或者只显示产生 4 个元素的输入字符串。我敢打赌只有 3 个逗号
-
@Andrew - 我正在检查尺寸并进行相应的处理。但不确定这是执行此操作的正确方法 ... if(reportDataList.size() == 4) { //处理所有为 4 的日期 } else { // 处理所有不是 4 的数据 }
-
如果列表大小是 4 而不是 6,这里没有人会知道您的程序需要做什么。这取决于您或您的用户或任何指定您的程序应该做什么的人。