java – 获取ArrayIndexOutOfBound:1异常
发布时间:2020-12-15 04:14:36 所属栏目:Java 来源:网络整理
导读:我试图解析一个字符串并将其存储在字符串数组中.当我试图解析字符串“log1”时,我能够解析它. ????但是当我解析字符串“log2”时,得到这个“线程中的异常”主“ java.lang.ArrayIndexOutOfBoundsException:1”. 运行以下代码: import static java.lang.Sys
我试图解析一个字符串并将其存储在字符串数组中.当我试图解析字符串“log1”时,我能够解析它.
????但是当我解析字符串“log2”时,得到这个“线程中的异常”主“ java.lang.ArrayIndexOutOfBoundsException:1”. 运行以下代码: import static java.lang.System.*; public class test{ static String[] final_log = new String[13]; static String audit = null; static String[] auditArray = null; static int j=0; public static void main(String[] args) { String[] columnlist = {"UserID","ClientAddress","Severity","EventType","ResourceAccessed","EventStatus","CompulsoryEvent","AuditCategory","ComponentID","AuditDetails","App ID","Cluster ID","Node ID"}; String log1 = "UserID : ccmadministrator ClientAddress : 172.30.235.29 Severity : 5 EventType : GeneralConfigurationUpdate ResourceAccessed: CUCMAdmin EventStatus : Success CompulsoryEvent : No AuditCategory : AdministrativeEvent ComponentID : Cisco CUCM Administration AuditDetails : record in table batjob with key field name = Export Configuration,Job id : 1380812040 added App ID: Cisco Tomcat Cluster ID: Node ID: iptapps-eft-cucm1" ; String log2 = "09:03:36.776 |LogMessage UserID : ccmadministrator ClientAddress : 172.30.238.14 Severity : 6 EventType : GeneralConfigurationUpdate ResourceAccessed: Cisco CCM Serviceability RTMT EventStatus : Success CompulsoryEvent : No AuditCategory : AdministrativeEvent ComponentID : Cisco CCM Serviceability RTMT AuditDetails : Alert status changed to Enable for the alert: Cisco Syslog Agent:SYSAGENT:SyslogSeverityMatchFound App ID: Cisco Tomcat Cluster ID: Node ID: iptapps-eft-cucm1"; auditArray = log2.split("UserID"); System.out.println("count :" +j); audit = auditArray[1]; for (int i = 1; i < columnlist.length; i++) { auditArray = audit.split(columnlist[i]); balle(); } final_log[j]= audit.trim().substring(1).trim(); for (int i = 0; i < final_log.length; i++) { System.out.println("test : " +final_log[i]); } } public static void balle(){ final_log[j] = auditArray[0].trim().substring(1).trim(); audit = auditArray[1]; System.out.println(final_log[j]); j++; } } log1的控制台输出是:: count :0 ccmadministrator 172.30.235.29 5 GeneralConfigurationUpdate CUCMAdmin Success No AdministrativeEvent Cisco CUCM Administration record in table batjob with key field name = Export Configuration,Job id : 1380812040 added Cisco Tomcat test : ccmadministrator test : 172.30.235.29 test : 5 test : GeneralConfigurationUpdate test : CUCMAdmin test : Success test : No test : AdministrativeEvent test : Cisco CUCM Administration test : record in table batjob with key field name = Export Configuration,Job id : 1380812040 added test : Cisco Tomcat test : test : iptapps-eft-cucm1 log2的控制台输出是:: count :0 ccmadministrator 172.30.238.14 6 GeneralConfigurationUpdate Cisco CCM Serviceability RTMT Success No AdministrativeEvent Cisco CCM Serviceability RTMT Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at test.balle(test.java:43) at test.main(test.java:27) 来自OP的评论: Line 43 is :: audit = auditArray[1]; {present in balle method} 解决方法
问题是,当您使用列名重复拆分字符串时,会无意中截断字符串的其余部分.
log2的作用是“Severity”在字符串中出现两次,因此split的结果是一个三元素数组.然后,您只继续索引为1的元素中的内容.因此,您将丢弃第二次出现“严重性”后的内容. 在你的循环中你开始寻找字符串“App ID”,然后,你在字符串中找不到它,因为它是在第二个“严重性”之后.因此,split只返回一个元素,并获得您获得的异常. 要解决此问题,您应该使用split的第二个参数来限制方法返回的标记数.代替 : auditArray = audit.split(columnlist[i]); 使用 auditArray = audit.split(columnlist[i],2); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |