java截取或拆分字符串

这里我是利用substring,split以及正则表达式去对一个字符串进行截取,或者说是将一个字符串拆分成几个子串。

正则表达式 + substring / split

package cn.nuist.jr;

import java.util.ArrayList;
import java.util.List;

public class Test {
	public static void main(String[] args) {

		//以regex作为分隔符,将一串字符中的其他部分截取出来
		String str = "82988abc3443abcfgjhgabcgfjabc";    
		String regex = "abc";  

		//    String [] res = str.split(regex);  
		//        for(int i =0; i < res.length; i++){
		//        	System.out.println(res[i]);
		//        }  //split部分
		List list = new ArrayList();

		while(str.contains(regex)){

			list.add(str.substring(0, str.indexOf(regex)));      
			str = str.substring(str.indexOf(regex) + regex.length());
			//        System.out.println(str);
		}

		for(String string : list){
			System.out.println(string);
		}
	}
}

参考截图:

java截取或拆分字符串_第1张图片

java截取或拆分字符串_第2张图片

当我直接用正则表达式去截取时,会出现局限性,如下所示。希望您们可以和我一起讨论改进。

package cn.nuist.jr;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {

	    public static void main(String[] args) {  
	       
	        String str = "82988abc3443abcgfjabc8068abc";    
	        String regex = "abc(.*?)abc";  
	        
	        System.out.println((new Regex()).getSubUtil(str, regex)); 
	        
	        List list = (new Regex()).getSubUtil(str, regex);  
	        for (String string : list) {  
	            System.out.println(string);  
	        }  
	    }    
	    public List getSubUtil(String temp,String regex){    
	        List list = new ArrayList();    
	        Pattern p = Pattern.compile(regex);    
	        Matcher m = p.matcher(temp);    
	        while (m.find()) {    
	            int i = 1;    
	            list.add(m.group(i));    
	            i ++;    
	        }    
	        return list;    
	    }    
} 

截图:

你会发现他读取第一个abc和abc之间的数之后,会把与下一个abc间的数错过,具体看截图和代码的对比。所以待解决。故而第一种更值得推荐。


以上就是这篇的内容,有什么错误的地方或者您觉得可以改进的地方,欢迎指出,谢谢!



你可能感兴趣的:(java,正则表达式)