提问人:ZaIn Ul AbiDeen Sān 提问时间:4/26/2021 最后编辑:dreamcrashZaIn Ul AbiDeen Sān 更新时间:4/27/2021 访问量:99
如何在 java 中获取字符串 (6678766566) 中重复的精确双六计数?
How to get a count of exact double six repeated in a string (6678766566) in java?
答:
1赞
Ayush Wadhwa
4/26/2021
#1
String str = "6678766566";
int count = 0;
for(int i=0; i<str.length()-1; i++){
if(str.charAt(i)=='6' && str.charAt(i+1)=='6'){
count++;
i++;
}
}
System.out.println(count);
1赞
the Hutt
4/26/2021
#2
您可以使用 Pattern api:
String s = "6678766766";
Pattern p = Pattern.compile("66");
Matcher m = p.matcher(s);
int count = 0;
while(m.find()) {
count++;
}
System.out.println(count);
注意:要包含重叠,请使用 pattern 。这将给出 的计数 2。(6)(?=(6))
666
评论
0赞
Khanna111
4/26/2021
不要以为这会像被问到的那样包括重叠。
0赞
the Hutt
4/26/2021
为此,我们使用 模式 .(6)(?=(6))
1赞
Khanna111
4/26/2021
#3
为了让它变得有趣一点,您可以使用正则表达式方式。请注意,我们没有进行任何重叠。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Match {
public static void main(String[] args) {
final String regex = "(66)";
final String string = "667876656666";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
//prints 4
System.out.println("Number of matches: " + matcher.results().count());
}
}
要同时包含重叠项,请执行以下操作:
final String string = "667876656666767666";
int i = 0;
int count = 0;
while (i < string.length() -1) {
if (string.charAt(i) == '6' && string.charAt(i+1) == '6') {
count++;
}
i++;
}
// prints 7
System.out.println("Number of matches including overlaps: " + count);
3赞
Arvind Kumar Avinash
4/26/2021
#4
有很多方法可以做到这一点。一些方法如下所示:
使用正则表达式模式和 Java 正则表达式 API:
6(?=6)
流
版本:
import java.util.regex.Pattern; public class Main { public static void main(String[] args) { long count66 = Pattern.compile("6(?=6)") .matcher("6678766566") .results() .count(); System.out.println(count66); } }
- 非
流
版本:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { int count66 = 0; Matcher matcher = Pattern.compile("6(?=6)").matcher("6678766566"); while (matcher.find()) { count66++; } System.out.println(count66); } }
请注意,它用于 Positive Lookahead。(?=(regex))
使用
String#indexOf
:public class Main { public static void main(String[] args) { int count66 = 0; String str = "6678766566"; for (int i = 0; i < str.length(); i++) { int index = str.indexOf("66", 0); if (index != -1) { count66++; str = str.substring(index + 1); } } System.out.println(count66); } }
评论