我曾尝试使用split方法拆分字符串,但是在使用split方法时遇到了一些问题。
String str="1-DRYBEANS,2-PLAINRICE,3-COLDCEREAL,4-HOTCEREAL,51-ASSORTEDETHNIC,GOURMET&SPECIALTY";
List<String> zoneArray = new ArrayList<>(Arrays.asList(zoneDescTemp.split(",")));
实际输出:
zoneArray = {"1-DRYBEANS","2-PLAINRICE","3-COLDCEREAL","4-HOTCEREAL","51-ASSORTEDETHNIC","GOURMET&SPECIALTY"}
预期输出:
zoneArray = {"1-DRYBEANS","2-PLAINRICE","3-COLDCEREAL","4-HOTCEREAL","51-ASSORTEDETHNIC,GOURMET&SPECIALTY"}
任何帮助将不胜感激。
答案 0 :(得分:3)
使用split(",(?=[0-9])")
您不仅要用逗号分隔,而且仅当逗号后跟0-9的数字时才用逗号分隔。这也称为正向超前(?=)。
以下面的代码片段为例:
public static void main(String[] args) {
String str="1-DRYBEANS,2-PLAINRICE,3-COLDCEREAL,4-HOTCEREAL,51-ASSORTEDETHNIC,GOURMET&SPECIALTY";
String[] array1= str.split(",(?=[0-9])");
for (String temp: array1){
System.out.println(temp);
}
}
}
答案 1 :(得分:3)
在正则表达式中使用先行查找,先使用逗号(不使用先行),然后使用数字(先行)。 \\d+
就足够了。正则表达式如下所示:
String regex = ",(?=\\d+)";
例如:
public class Foo {
public static void main(String[] args) {
String str = "1-DRYBEANS,2-PLAINRICE,3-COLDCEREAL,4-HOTCEREAL,51-ASSORTEDETHNIC,GOURMET&SPECIALTY";
String regex = ",(?=\\d+)";
String[] tokens = str.split(regex);
for (String item : tokens) {
System.out.println(item);
}
}
}
这样做是在逗号后加数字,但不会从输出中删除数字,因为数字是预读的一部分。
有关前瞻性,后视性和环顾四周的更多信息,请查看this relevant tutorial page。