我试图在每次出现第N次时分割一个字符串,但缺少最后一个值。这是预期的结果。如何在Java中字符的第N次出现时分割字符串
输入:String str = "234-236-456-567-678-675-453-564";
输出:
234-236-456
567-678-675
453-564
N=3
这里,其中str
应在每-
第三occurence进行分割。
我试图在每次出现第N次时分割一个字符串,但缺少最后一个值。这是预期的结果。如何在Java中字符的第N次出现时分割字符串
输入:String str = "234-236-456-567-678-675-453-564";
输出:
234-236-456
567-678-675
453-564
N=3
这里,其中str
应在每-
第三occurence进行分割。
也许最糟糕的途径之一,而无需使用功能在java中可用,但像前一样好ercise:
public static void main(String[] args){
String s = "234-236-456-567-678-675-453-564";
int nth =0;
int cont =0;
int i=0;
for(;i<s.length();i++){
if(s.charAt(i)=='-')
nth++;
if(nth == 3 || i==s.length()-1){
if(i==s.length()-1) //with this if you preveent to cut the last number
System.out.println(s.substring(cont,i+1));
else
System.out.println(s.substring(cont,i));
nth=0;
cont =i+1;
}
}
}
试试这个。
String str = "234-236-456-567-678-675-453-564";
String[] f = str.split("(?<=\\G.*-.*-.*)-");
System.out.println(Arrays.toString(f));
结果:
[234-236-456, 567-678-675, 453-564]
也许你可以在lookbehind中解释'\\ G'。 –
您可以尝试使用Java 8如下:
String str = "234-236-456-567-678-675-453-564";
Lists.partition(Lists.newArrayList(str.split("-")), 3)
.stream().map(strings -> strings.stream().collect(Collectors.joining("-")))
.forEach(System.out::println);
输出:
234-236-456
567-678-675
453-564
这工作就像一个魅力。谢谢弗兰克! – AyrusTerminal
欢迎你 – Frank
替换'for(; i
Lino