split("[^A-Za-z0-9]")作用查询:是拆分单词还是拆分单个字符?
split("[^A-Za-z0-9]")作用解答
核心结论
这个拆分逻辑是按照非字母数字的字符作为分隔符拆分字符串,最终得到的是单词/数字序列,而非单个字符。
原理说明
你给出的代码片段如下:
String func(String sen) { String[] var = sen.toLowerCase().split("[^A-Za-z0-9]"); // 注:Java标准语法中字符串转小写方法为小驼峰写法toLowerCase() ...
拆分逻辑的规则完全由split方法入参的正则表达式决定,[^A-Za-z0-9]的含义如下:
- 方括号
[]代表正则的字符匹配组,单次匹配一个字符 - 方括号开头的
^代表反向匹配,即匹配「不在当前方括号定义的字符范围内」的字符 A-Za-z0-9定义的字符范围是所有大小写英文字母、0-9阿拉伯数字
所以整个正则的作用是匹配所有「非英文字母、非数字」的字符(比如标点、空格、下划线、特殊符号等),split方法会把所有匹配到的这类字符当作拆分分隔符,分隔符中间的连续合法字符(字母/数字)就会被拆成数组的单个元素,也就是我们通常说的「单词」。
示例验证
假设输入字符串为"Hello,World! 2024@test",执行逻辑后的结果如下:
- 先转全小写得到
"hello,world! 2024@test" - 所有非字母数字的字符
, ! 空格 @都会被当作分隔符 - 最终拆分得到的数组为
["hello", "world", "2024", "test"]
补充说明
如果输入字符串中存在连续多个非字母数字字符,用当前正则拆分后会出现空字符串元素,比如输入"hello...world",拆分结果为["hello", "", "", "world"]。如果要避免这种情况,可以将正则修改为"[^A-Za-z0-9]+",加+代表匹配1个及以上连续的非字母数字字符,合并连续分隔符做一次拆分。
内容的提问来源于stack exchange,提问作者Ahcene Belhadi
相关产品推荐
相关产品推荐

