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

2022-03-26 00:25:05 +08:00
 mghio

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

public String substring(int beginIndex, int endIndex)

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

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

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

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

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

另外,假设标准库按楼主说的这样做了:index 不正确,返回空字符串。说不定哪天楼主或者其它用户又会来抱怨了:为什么不正确的 index 也能返回空字符串,我哪知道是真的是空字符串还是因为 index 不正确导致的空字符串。。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/842968

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX