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>
问题解决。


你可能感兴趣的:(java中String对象的split方法的小陷阱)