0

可能重复:
字符串拆分不返回空结果

我有一串用逗号(,)分隔的单词,我需要将主字符串标记或拆分为子字符串。例如,string="file1,param1,file2,param2,file3," 字符串的含义是所有文件名的列表和传递给它的参数。就像,对于 file1--> param1、file2-->param2 和 file3,不存在任何参数。

所以我需要提取文件名和参数,如果有的话。如果没有参数,我需要获取空字符串(“”)。

import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class XStringTokenizer {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String str = new String("File1,param1,File2,");
        List list = new ArrayList();
        System.out.println(str.split(",").length);
        String[] string = str.split(",");
        for(int i=0;i<string.length;i++){
            list.add(string[i]);
        }
        System.out.println(list);
    }
}

上述示例代码的当前输出为 [File1,param1,File2],但预期输出为 [File1,param1,File2,]。基本上我不应该错过上面字符串中第三个逗号之后的结尾空字符串str

4

7 回答 7

3

看起来你应该使用

 String[] string = str.split(",",-1);

String.split(String,int)的javadoc声明“如果 n 为非正数,则该模式将被应用尽可能多的次数,并且数组可以具有任意长度。”

于 2012-06-27T17:52:55.383 回答
1

使用带有负数限制的public String[] split(String regex, int limit)

于 2012-06-27T17:51:45.730 回答
1

删除最后一个,或考虑使用Apache Commons Lang 包,其中包括StringUtils.join(),它完全符合您的要求。

于 2012-06-27T17:54:21.920 回答
0

我认为 str.split(",") 仅在逗号后跟某个字符而不是“无”时才拆分,因为逗号是字符串的最后一个字符。因此,在这种情况下,拆分不会将其识别为分隔符,并且不会生成您在数组中期望的第 4 个字符串,因为它将为空。

我希望这可以帮助你。

于 2012-06-27T17:53:33.690 回答
0

您可以通过检查字符串是否以“,”结尾来简单地做到这一点,然后在列表中添加一个空字符串。您需要在最后执行此操作

if(str.endsWith(',')) list.add("");
于 2012-06-27T17:54:12.760 回答
0
String str = new String("File1,param1,File2,");
java.util.Tokenizer tk= new java.util.Tokenizer(str,",");
while(tk.hasMoreTokens()) {
    String tokenFile= tk.nextToken();
    String tokenParam= tk.nextToken();
    // do things...
}
于 2012-06-27T17:51:57.193 回答
-2

这不是 String.split 的工作方式。

因此,尾随的空字符串不包含在结果数组中。

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split%28java.lang.String%29

您可以检查字符串是否以逗号结尾,然后自己添加空字符串

于 2012-06-27T17:51:18.630 回答