2012-06-27 122 views
0

可能重复:
String split not returning empty results分裂Java字符串

我具有由逗号分隔的单词的字符串(,),我需要标记化或主串分割为多个子。例如,string="file1,param1,file2,param2,file3," 字符串的含义是所有文件名和传递给它的参数列表。像, for 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中,参数1,文件2],但预期的输出为[File1中,参数1,文件2,]。基本上我不应该在上面的str字符串中的第三个逗号之后错过结束空字符串。

回答

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... 
} 
3

看起来你应该使用

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

String.split(String,int)的javadoc指出“如果n是非正值,那么该模式将尽可能多地应用,并且该数组可以有任意长度。”

+0

是的,我纠正我的代码通过传递n = -1分裂方法来获得所需的结果。谢谢 – vchitta

+0

如果这是正确的,请将答案设为您接受的答案。谢谢! – Nicole

0

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

我希望这可以帮助你。

0

您可以通过检查字符串结尾简单地做它“”再添加一个空字符串在list..And u需要在年底要做到这一点

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