Java 在正则表达式中拆分任意数量的特殊字符并给出数组大小

Java 在正则表达式中拆分任意数量的特殊字符并给出数组大小,java,regex,Java,Regex,我有一个s字符串,其中*可以是任意数。我使用的正则表达式模式在开始时没有拆分。我不想使用String.substring来删除开头的*。可能是我有点像***地点1*地点2**地点3*。或者类似placeStr的东西=** 另外,在使用String.split\\*+删除placeStr=**时,如果输入字符串类似***,则会给出错误的数组大小。在本例中,数组大小为1。但我希望数组大小为零,因为数组中没有位置。我要计算的是位置的数量。如果您不想在执行拆分时处理空字符串,以防开头有多个星号,只需替换

我有一个s字符串,其中*可以是任意数。我使用的正则表达式模式在开始时没有拆分。我不想使用String.substring来删除开头的*。可能是我有点像***地点1*地点2**地点3*。或者类似placeStr的东西=**


另外,在使用String.split\\*+删除placeStr=**时,如果输入字符串类似***,则会给出错误的数组大小。在本例中,数组大小为1。但我希望数组大小为零,因为数组中没有位置。我要计算的是位置的数量。

如果您不想在执行拆分时处理空字符串,以防开头有多个星号,只需替换开头的星号,然后执行简单拆分即可

示例代码

public static void main(String[] args) {
    String placeStr = "***place1*place2**place3*";
    placeStr = placeStr.replaceAll("^[*]+", "");
    String[] places = placeStr.split("[*]+");
    System.out.println("places.length: " + places.length);
    Arrays.asList(places).forEach(System.out::println);
}
印刷品

places.length: 3
place1
place2
place3
如果这是你想做的,请告诉我

编辑答案以澄清拆分:

考虑到你的代码

String placeStr="*place1*place2**place3*";
String[] places=placeStr.split("(\\*)+");
System.out.println("array size: " + places.length);
你会得到

array size: 4
因为字符串中的第一颗星分裂并给出空字符串。但是如果删除字符串开头的所有星号并使代码如下所示

String placeStr="place1*place2**place3*";
String[] places=placeStr.split("(\\*)+");
System.out.println("array size: " + places.length);
然后这将输出数组大小为

array size: 3
字符串中的最后一个星号或任何字符的行为与第一个字符的行为不同,并且在拆分时,它们不会在最后一个数组元素中给出空字符串

这就是正则表达式拆分字符串在java中的工作方式。让我知道,如果你有一些其他的期望,可能是因为你说这是给你错误的输出

希望这能澄清


另外,您能告诉我您希望在逻辑上实现什么吗?

我想您不希望数组中有一个空项。然后将匹配代码与[^*]+一起使用regex@WiktorStribiżew:我有点不确定这是否是OP想要的,你可能是对的,OP不想在开始或结束时与任何明星分离。更新了正则表达式以解决这个问题,现在开始时不会出现空行,因为拆分只会发生在中间星号中。看看这个问题,OP可能还想使用s.replaceFirst^\\\*+,.split\\*+。我认为更简单的方法是首先删除regex开头和结尾的所有星号,然后在[*]+上进行简单的拆分。您不需要在结尾删除它们,拆分会丢弃结尾的所有空项|[*]+$是不必要的复杂因素。@WiktorStribiżew:是的,你是对的。最后的星星不需要被处理。你对Wiktor有着丰富的经验。
array size: 3