关于「 Java String 里的 substring 操作」的一些思考 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
mghio
V2EX    程序员

关于「 Java String 里的 substring 操作」的一些思考

  •  
  •   mghio 2022-03-26 00:25:05 +08:00 1924 次点击
    这是一个创建于 1348 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Java String 里的 substring 操作,这个相信很多 Java 开发者都有感受。

    public String substring(int beginIndex, int endIndex)

    如果传入的参数越界,或者 beginIndex 大于 endIndex ,它都会抛异常,使用者不得不在传入之前检查一下。

    个人觉得更好的方式是:substring 返回该字符串和参数指定范围的交集就好了,如果越界或者 beginIndex 大于 endIndex ,就返回空字符串。Apache Common 的 StringUtils 就是这么设计的。

    你可能会说调用方可能会误用,开发者应该想办法避免被误用。其实很难避免调用方误用,而我们有时会为了避免误用,反而会引入很多不必要的复杂性,不管是对调用方还是对实现方,这是得不偿失的。。。

    golangLover
        1
    golangLover  
       2022-03-26 00:40:21 +08:00 via Android
    你会发现所有语言官方设计的 lib 都挺渣,java 已经算不错的了。而且有 apache common 辅助
    zmal
        2
    zmal  
       2022-03-26 00:46:26 +08:00 via iPhone
    好像 python 就是这样做的?
    API 的设计是一门科学,各自有不同的取舍。
    potatowish
        3
    potatowish  
       2022-03-26 01:05:57 +08:00 via iPhone   1
    这种反而是极好的,作为基础 API 语义就要更加明确,越接近上层应用越需要考虑其健壮性
    xuanbg
        4
    xuanbg  
       2022-03-26 09:27:59 +08:00
    自己封装 util 呀
    1194129822
        5
    1194129822  
       2022-03-26 10:23:38 +08:00
    标准库 API 设计者比你懂,Java 标准库 API 不说是最好,也是所有语言前几的水平。真有问题的设计也有一套标准流程修改。你如果质疑,至少你需要达到他们水平,按照标准规则参与吧。不然和空想,民科有什么区别?
    seakingii
        6
    seakingii  
       2022-03-26 15:00:21 +08:00
    标准库的 API 定义应该语义清晰,而不是像楼主说的:这样也可以,那样也可以。。。

    第三方库或者自己写的包装库,可以根据不同的需求(比如更方便),做额外的封装,但最底层的基础库,还是逻辑简单点好。

    另外,假设标准库按楼主说的这样做了:index 不正确,返回空字符串。说不定哪天楼主或者其它用户又会来抱怨了:为什么不正确的 index 也能返回空字符串,我哪知道是真的是空字符串还是因为 index 不正确导致的空字符串。。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     955 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 19:43 PVG 03:43 LAX 11:43 JFK 14:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86