我有一串用逗号(,)分隔的单词,我需要将主字符串标记或拆分为子字符串。例如,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个逗号之后的结束空字符串。
答案 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
您可以检查字符串是否以逗号结尾,然后自己添加空字符串