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<String> list = new ArrayList<String>();

		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);
		}
	}
}

参考截图:

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

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<String> list = (new Regex()).getSubUtil(str, regex);  
	        for (String string : list) {  
	            System.out.println(string);  
	        }  
	    }    
	    public List<String> getSubUtil(String temp,String regex){    
	        List<String> list = new ArrayList<String>();    
	        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间的数错过,具体看截图和代码的对比。所以待解决。故而第一种更值得推荐。


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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值