V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
mghio
V2EX  ›  程序员

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

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

    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   ·   实用小工具   ·   1030 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:12 · PVG 07:12 · LAX 15:12 · JFK 18:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.