V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
mghio
V2EX  ›  程序员

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

  •  
  •   mghio · Mar 26, 2022 · 2152 views
    This topic created in 1493 days ago, the information mentioned may be changed or developed.

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

    public String substring(int beginIndex, int endIndex)

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

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

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

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

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

    另外,假设标准库按楼主说的这样做了:index 不正确,返回空字符串。说不定哪天楼主或者其它用户又会来抱怨了:为什么不正确的 index 也能返回空字符串,我哪知道是真的是空字符串还是因为 index 不正确导致的空字符串。。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1829 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 16:22 · PVG 00:22 · LAX 09:22 · JFK 12:22
    ♥ Do have faith in what you're doing.