java - 字符串 split() 删除尾随的空条目
问题描述
我正在使用 split() 来收集字符串中句点之间的值。如果用户输入尾随句点,则 split() 不会将这些句点作为空字符串返回,而是删除它们:
String[] parts = "a.b.c...d...e".split("\\.");
for ( int i = 0; i < parts.length; i++ )
System.out.println("" + i + ": '" + parts[i] + "'" );
0: 'a'
1: 'b'
2: 'c'
3: ''
4: ''
5: 'd'
6: ''
7: ''
8: 'e'
删除最后一个'e':
String[] parts = "a.b.c...d...".split("\\.");
for ( int i = 0; i < parts.length; i++ )
System.out.println("" + i + ": '" + parts[i] + "'" );
0: 'a'
1: 'b'
2: 'c'
3: ''
4: ''
5: 'd'
第 6 部分和第 7 部分发生了什么?似乎 split() 只是放弃了它们。然而,它们存在于字符串中。split() 不应该将第 6 部分和第 7 部分作为空字符串返回吗?
解决方案
请参阅javadoc:
此方法的工作方式就像通过使用给定表达式和零限制参数调用双参数拆分方法一样。因此,尾随的空字符串不包含在结果数组中。
所以它的行为符合定义。如果您对此不满意,您可以按照手册的建议进行操作,并使用负参数进行限制。
String[] parts = "a.b.c...d...".split("\\.", -1);
for ( int i = 0; i < parts.length; i++ )
System.out.println("" + i + ": '" + parts[i] + "'" );
0: 'a'
1: 'b'
2: 'c'
3: ''
4: ''
5: 'd'
6: ''
7: ''
8: ''
推荐阅读
- amazon-web-services - AWS Javascript SDK 仅安装特定模块而不是整个 SDK
- javascript - 第一次单击时输入状态未绑定 onChange
- gnuplot - Gnuplot:如何显示超过 24 小时?
- javascript - 如何正确使用 createPages API 以编程方式创建页面?
- java - 如何设置 onItemClickListener
- javascript - 我可以在原型方法中修改字符串的内容吗?
- reactjs - 在状态更改时一次仅显示一个弹出窗口
- c# - 调试输出窗口一遍又一遍地显示“启动线程”和“停止线程”
- python - 如何修复“Spider 必须返回 Request、BaseItem、dict 或 None,被‘设置’在......”
- python - 刷新python瓶中的页面时数据似乎没有更新?