今天写业务被垃圾 Java 坑了一把,折腾了一个下午(辱骂性质

2019-08-09 20:58:52 +08:00
 Kilerd

根本想不到 Java 的 split 函数还跟其他语言的表现不一样,惊了。

javascript

"1\n\n\n\n\n".split("\n")

结果

["1", "", "", "", "", ""]

python

"1\n\n\n\n\n".split("\n")

结果

['1', '', '', '', '', '']

golang

package main

import (
	"fmt"
	"strings"
)

func main() {
	fmt.Println(len(strings.Split("1\n\n\n\n\n", "\n")))
}

结果 6

可是 java

"1\n\n\n\n\n".split("\n")

只有一个结果

["1"]

绝了,组里基本没人猜出来。 应该说根本想不到是这里的原因导致的 bug

3012 次点击
所在节点    分享发现
19 条回复
Nasei
2019-08-09 21:15:11 +08:00
java 的话应该只有尾部的空字符串不包含

还是我大 C#好,可以传 StringSplitOptions
klesh
2019-08-09 21:25:55 +08:00
Java 先于这三个语言面世
smeraldo
2019-08-09 21:28:22 +08:00
@klesh 你确定 Java 比 Python 早?
v2survive
2019-08-09 21:48:11 +08:00
`"1\n\n\n\n\n".split("\n", -1)`
Leigg
2019-08-09 21:53:44 +08:00
pyer 表示有点反人类
gabon
2019-08-09 21:57:22 +08:00
这是 feature 不是 bug😏
crella
2019-08-09 22:06:38 +08:00
my str $str = "1\n\n\n\n\n"; say $str.split("\n");
> (1 )
jamesxu
2019-08-09 22:17:43 +08:00
请用 guava 的 splitter
anzu
2019-08-09 22:20:28 +08:00
同坑 2333 /t/568469
lululau
2019-08-09 22:23:55 +08:00
有啥问题吗,写代码先看文档啊,再说了也不是只有 Java 是这种行为啊,Perl / Ruby 的字符串 split 函数 /方法默认也是去掉末尾的空值啊
20015jjw
2019-08-09 22:55:18 +08:00
只能说这两种逻辑都合理吧..
Kilerd
2019-08-09 23:02:44 +08:00
@lululau #10 这样做没问题,但是在其他语言同样函数的基础下,很难想象得到是这个那么日常的函数的问题。
如果写代码这种常见函数都需要查文档,那就太过分了。
FreeEx
2019-08-09 23:18:18 +08:00
第二个参数传-1 即可,语言之间设计的不同也是骂点?
iPhoneXI
2019-08-09 23:19:23 +08:00
写多语言是这样的
不查好 api 文档说不定哪里就是坑
所以不要贸然在生产环境换语言
个人项目就多看文档多谷歌了
klesh
2019-08-09 23:21:47 +08:00
@smeraldo 我错了
conn4575
2019-08-10 05:04:28 +08:00
还有个 replace 方法,居然是正则替换,第一次用惊呆了
Amance
2019-08-10 09:39:04 +08:00
大哥,基础不够不要多 BB
oahebky
2019-08-10 10:41:46 +08:00
好语言 /语法应该是符合自觉的,或者说尽可能地符合直觉,只有在技术限制或逻辑限制的情况下反自觉是可以理解的。

不过我个人认为用一个没写过的方法,尽可能地写 hello world 级别的程序验证,试一试比较好,然后再写进代码中去(像解释型语言就直接在 repl 中试比较容易)。
justin2018
2019-08-10 14:41:46 +08:00
这是 feature 不是 bug 吧~

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

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

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

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

© 2021 V2EX