java中String对象的split方法的小陷阱

问题出现的代码段:

 	            
	            try {  
	 	           	   			 
	   			 FileReader fr;
	   				try {
	   					
	   					fr = new FileReader("C:\\TxtData\\NetFlowAttackDDOS\\import.csv");
	   					BufferedReader br = new BufferedReader(fr);
	   					String line = "";
	   					String arrs[] = null;
	   					
	   					long i = 0;
	   					 					
	   					while ((line = br.readLine()) != null) {
	   						
	   						System.out.println(line);
	   						
	   						arrs = line.split("|");	
	   							   						
	   						DBObject data4 = new BasicDBObject();
	   	    	            data4.put("_id",i+"");
	   	    	            data4.put("c1",arrs[0]);
	   	    	            data4.put("c2",arrs[1]);
	   	    	            data4.put("c3",arrs[2]);
	   	    	            data4.put("c4",arrs[3]);	
	   	    	            data4.put("c5",arrs[4]);
	   	    	            data4.put("c6",arrs[5]);
	   	    	            data4.put("c7",arrs[6]);
	   	    	            data4.put("c8",arrs[7]);	
	   	    	            data4.put("c9",arrs[8]);
	   	    	            data4.put("c10",arrs[9]);
	   	    	            data4.put("c11",arrs[10]);
	   	    	            data4.put("c12",arrs[11]);	
	   	    	            data4.put("c13",arrs[12]);
	   	    	            data4.put("c14",arrs[13]);
	   	    	            data4.put("c15",arrs[14]);
	   	    	            dbColl.insert(data4); 
	   	    	            
	   	    	            i++;
	   					}
	   					
	   					br.close();
	   					fr.close();
	   				
	   				} catch (FileNotFoundException e) {
	   				
	   					e.printStackTrace();
	   					
	   				} catch (IOException e) {
	   				
	   					e.printStackTrace();
	   					
	   				}
此时每次循环存入arrs中的数据总是不是预期的结果,原因到底是怎么回事呢?经过查找才明白: split 中的字符串不是字面意义,而是正则表达式,不巧的是“|”在正则表达式中具有特殊含义。

解决的办法是:将

arrs = line.split("|");	替换成->arrs = line.split(Pattern.quote("|"));<span style="white-space:pre">	</span>
问题解决。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值