Java(Android)截取字符串间的字符串(无BUG)及常见问题、技术分享

1 篇文章 0 订阅
1 篇文章 0 订阅
 初次写博客还望各位大佬多多包含,本人是刚接触Java不久的大白一枚(只是一个兴趣者),分享一些遇到的问题解决方法和经验。

(其中的不足及错误还望各位多多指教。)

Java(Android)截取字符串间的内容

  大家有时可能遇到这样子的问题,比如需要截取"<p>你好</p>"直接的内容,但是安卓提供的java.lang.String.substring()方法并不能满足各种需求,需要大家自己封装一个,那么问题就来了,首先,看看substring()的使用。

(以下内容摘自博客:https://www.cnblogs.com/xiadongqing/p/6235833.html)  

方法如下:

public String substring(int beginIndex, int endIndex)
第一个int为开始的索引,对应String数字中的开始位置,
第二个是截止的索引位置,对应String中的结束位置
1、取得的字符串长度为:endIndex - beginIndex;
2、从beginIndex开始取,到endIndex结束,从0开始数,其中不包括endIndex位置的字符

还有介绍之外的一种方法:

public String substring(int beginIndex)

该参数为开始的索引,对应String数字中的开始位置并且它是从beginIndex开始取,一直到末尾,也就是说是方法一的String.substring(beginIndex,String.lenth())


那么我们由此也可以写出一些截取方法了:

1.从某一位置截取到末尾

String afterString(String str,String start){
    if(str.contains(start)){
	return str.substring(str.indexOf(start)+start.length());
    }
    return "";
}

2.从开始截取到某一位置

String beforeString(String str,String end){
    if(str.contains(end)){
        return str.substring(0,str.indexOf(end));
    }
    return "";
}

3.截取字符串之间

String betweenString(String str,String start,String end){
    if(str.contains(start) && str.contains(end)){
        return str.substring(str.indexOf(start)+start.length(),str.indexOf(end));
    }
    return "";
}

但是,这最后一个有个问题,如果这样子用betweenString("1231456789","23","1");你可以发现会抛出异常:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -3
at java.lang.String.substring(String.java:1967)
at test.Main.betweenString(Main.java:28)
at test.Main.main(Main.java:8)

显示,超出字符串范围了,一看原来indexOf获取的第一个"1"的位置,但是我们需要"23"后面的第一个"1"的位置,所以说我们需要改下:

String betweenString(String str,String start,String end){
    if(str.contains(start) && str.contains(end)){
        str = str.substring(str.indexOf(start)+start.length());
        return str.substring(0, str.indexOf(end));
    }
    return "";
}

这样子就解决了异常,就是因为这个问题困扰了枭燚一个下午,不知道啥子问题(没看异常内容),然后突然来的灵感。

好了,这是本人第一篇博客如果内容有误请联系我,也请进行纠正等内容,部分内容截取自其他博客(忘记网址了),侵权也请联系我,谢谢支持。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值