如何在 java 中获取字符串 (6678766566) 中重复的精确双六计数?

How to get a count of exact double six repeated in a string (6678766566) in java?

提问人:ZaIn Ul AbiDeen Sān 提问时间:4/26/2021 最后编辑:dreamcrashZaIn Ul AbiDeen Sān 更新时间:4/27/2021 访问量:99

问:

我无法构建逻辑来获取字符串中存在的双六计数。 例如,“6678766566”,此字符串中存在三个双六。

java 则表达式 字符串 匹配 索引

评论

0赞 Khanna111 4/26/2021
你也想要重叠吗?如 666 => 2
0赞 ZaIn Ul AbiDeen Sān 4/26/2021
@Khanna111是的!
0赞 bashizip 4/26/2021
使用正则表达式匹配 //^[6]{2}@,然后计算出现次数
0赞 ZaIn Ul AbiDeen Sān 4/26/2021
@Khanna111还有一件事要澄清,在 6666 中,它应该只给我 1 个双六,没有 6 在双 6 后面或前面

答:

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

有很多方法可以做到这一点。一些方法如下所示:

  1. 使用正则表达式模式和 Java 正则表达式 API6(?=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))

  1. 使用 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);
        }
    }