编写高质量代码 —— 异常退出条件的判断

  • 无论是功能性代码还是算法性代码,程序都是一系列流程的合集
    • 既然是流程就分为:一般流程和异常流程;
    • 一般流程保证了基本功能;
    • 异常流程则是对程序稳定性的保证,不能因为一些非法输入,项目就挂了;
  • 注意,布尔表达式的先后顺序,有时不可以交换

    if (null == instance || instance.isEmpty())

0. 常见异常退出条件

  • 参数为空;
  • 表示长度,表示索引的整型为负数,或者超出待索引数组或容器的范围;

1. String 的 startsWith 函数

首先来看 String 类为 startsWith 函数提供的对外接口,有如下形式的俩中函数重载:

public boolean startsWith(String prefix, int toffset);
public boolean startsWith(String prefix) {
    starsWith(prefix, 0);     // 调用的是双参的实现
}

传递进来的参数的含义分别为,prefix:待匹配的字符串,toffset 当前字符串开始比较时的偏移,对于参数应当满足:

  • toffset >= 0;
  • this.value.length >= prefix.length + toffset

也就是:

char[] ta = value;
int pc = prefix.length;

if ((toffset < 0) || (toffset > value.length-pc))
{   // 负数形式的偏移,
    // 偏移加前缀的长度大于此字符串的长度;
    return false;
}

完整源码如下:

public boolean startsWith(String prefix, int toffset) {
    char ta[] = value;
    int to = toffset;
    char pa[] = prefix.value;
    int po = 0;
    int pc = prefix.value.length;
    // Note: toffset might be near -1>>>1.
    if ((toffset < 0) || (toffset > value.length - pc)) {
        return false;
    }
    while (--pc >= 0) {
        if (ta[to++] != pa[po++]) {
            return false;
        }
    }
    return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值