我试图通过java中的.split()方法拆分字符串。当我尝试将字符串拆分为
时 2000##Test
它给了我一个包含;
的数组 2000,,Test
但是当我试图分裂这样的东西时;
####
它什么都没给我。我想要的是
,,,,
编辑:我的分隔符是#
我怎样才能做到这一点。
美好的一天。
我的java代码是:
String splitString = "2000##1000####";
List<String> splitList = new ArrayList<String>();
String[] splitValues = text.split(splitString,"#");
for ( int i = 0;i< splitValues.length;i++){
splitList.add(splitValues[i]);
}
答案 0 :(得分:1)
这是一个已知且有记录的问题/行为。 String.split()
silently discards trailing separators.
split()
的JavaDocs(强调我的):
此方法的工作方式就像通过调用双参数split方法一样 给定的表达式和一个零的限制参数。 尾随空 因此,字符串不包含在结果数组中。
目前最简单的方法和首选分割机制是使用Google Guava&#39; Splitter
。
String input = "####";
System.out.println(Splitter.on('#').split(input));
输出:
[, , , , ]
此外,它避免了创建基础数组时所有结果,因为它懒得分裂。除了其他优点外,这对内存要求较低。
您的代码显示您要从结果数组中生成List
。这也很容易实现:
List<String> splitInput = Splitter.on('#').splitToList(input);
您也可以使用Apache Commons Lang's StringUtils.splitPreserveAllTokens()
:
StringUtils.splitPreserveAllTokens(input, '#');
还输出[, , , , ]
答案 1 :(得分:1)
您期待的works。
String string = "####";
String[] parts = string.split("#",-1);
System.out.println(Arrays.toString(parts));
提供[, , , ,]
文档说&#34;因此,结果数组中不包括尾随空字符串。&#34;。 split()
方法采用limit
参数,该参数描述为here。
limit参数控制模式的次数 应用因此会影响结果数组的长度。如果是 如果是非正数,那么模式将被应用多次 可能,阵列可以有任何长度。如果n为零,那么 模式将尽可能多地应用,数组可以有 任何长度,尾随空字符串都将被丢弃。
答案 2 :(得分:1)
如果使用overload of split
that takes an int
parameter并传递负值,则不会从结果数组中删除尾随空白项:
String[] splitValues = splitString.split("#", -1);
这会生成{"2000", "", "1000", "", "", "", ""}
数组。
答案 3 :(得分:0)
只是对此的补充,我意识到这不是你问的问题,但看起来你也想把你的分裂数组转换成一个列表,而不是你有的for循环
String splitString = "####";
List<String> splitList = Arrays.asList(splitString.split("#",-1));