拆分java字符串

时间:2012-06-27 17:46:14

标签: java

  

可能重复:
  String split not returning empty results

我有一串用逗号(,)分隔的单词,我需要将主字符串标记或拆分为子字符串。例如,string="file1,param1,file2,param2,file3," 字符串的含义是,所有文件名列表和传递给它的参数。喜欢, for file1 - >参数1, 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字符串中第3个逗号之后的结束空字符串。

7 个答案:

答案 0 :(得分:3)

看起来应该使用

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

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

答案 1 :(得分:1)

答案 2 :(得分:1)

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

答案 3 :(得分: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...
}

答案 4 :(得分:0)

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

我希望这会对你有所帮助。

答案 5 :(得分:0)

你可以通过检查字符串是否以','结尾,然后在列表中添加一个空字符串来完成它。你需要在结尾处这样做

if(str.endsWith(',')) list.add("");

答案 6 :(得分:-2)

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

  

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

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

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