根本想不到 Java 的 split 函数还跟其他语言的表现不一样,惊了。
"1\n\n\n\n\n".split("\n")
结果
["1", "", "", "", "", ""]
"1\n\n\n\n\n".split("\n")
结果
['1', '', '', '', '', '']
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(len(strings.Split("1\n\n\n\n\n", "\n")))
}
结果 6
"1\n\n\n\n\n".split("\n")
只有一个结果
["1"]
绝了,组里基本没人猜出来。 应该说根本想不到是这里的原因导致的 bug
1
Nasei 2019-08-09 21:15:11 +08:00
java 的话应该只有尾部的空字符串不包含
还是我大 C#好,可以传 StringSplitOptions |
2
klesh 2019-08-09 21:25:55 +08:00 via Android
Java 先于这三个语言面世
|
4
v2survive 2019-08-09 21:48:11 +08:00 via Android
`"1\n\n\n\n\n".split("\n", -1)`
|
5
Leigg 2019-08-09 21:53:44 +08:00 via Android
pyer 表示有点反人类
|
6
gabon 2019-08-09 21:57:22 +08:00 via Android
这是 feature 不是 bug😏
|
7
crella 2019-08-09 22:06:38 +08:00
my str $str = "1\n\n\n\n\n"; say $str.split("\n");
> (1 ) |
8
jamesxu 2019-08-09 22:17:43 +08:00 via iPhone
请用 guava 的 splitter
|
10
lululau 2019-08-09 22:23:55 +08:00 5
有啥问题吗,写代码先看文档啊,再说了也不是只有 Java 是这种行为啊,Perl / Ruby 的字符串 split 函数 /方法默认也是去掉末尾的空值啊
|
11
20015jjw 2019-08-09 22:55:18 +08:00 via Android
只能说这两种逻辑都合理吧..
|
12
Kilerd OP @lululau #10 这样做没问题,但是在其他语言同样函数的基础下,很难想象得到是这个那么日常的函数的问题。
如果写代码这种常见函数都需要查文档,那就太过分了。 |
13
FreeEx 2019-08-09 23:18:18 +08:00 via iPhone
第二个参数传-1 即可,语言之间设计的不同也是骂点?
|
14
iPhoneXI 2019-08-09 23:19:23 +08:00
写多语言是这样的
不查好 api 文档说不定哪里就是坑 所以不要贸然在生产环境换语言 个人项目就多看文档多谷歌了 |
16
conn4575 2019-08-10 05:04:28 +08:00 via Android
还有个 replace 方法,居然是正则替换,第一次用惊呆了
|
17
Amance 2019-08-10 09:39:04 +08:00
大哥,基础不够不要多 BB
|
18
oahebky 2019-08-10 10:41:46 +08:00 via Android
好语言 /语法应该是符合自觉的,或者说尽可能地符合直觉,只有在技术限制或逻辑限制的情况下反自觉是可以理解的。
不过我个人认为用一个没写过的方法,尽可能地写 hello world 级别的程序验证,试一试比较好,然后再写进代码中去(像解释型语言就直接在 repl 中试比较容易)。 |
19
justin2018 2019-08-10 14:41:46 +08:00
这是 feature 不是 bug 吧~
|