我正在学习Java,因为我完成了CodingBat练习,我想开始使用正则表达式来解决某些2级字符串问题。我目前正试图解决这个问题:
返回字符串“code”出现在给定字符串中的任何位置的次数,除非我们接受任何字母“d”,因此“cope”和“cooe”计数。
countCode("aaacodebbb") → 1
countCode("codexxcode") → 2
countCode("cozexxcope") → 2
以下是我编写的代码(不起作用,我想知道原因):
public int countCode(String str) {
int counter = 0;
for (int i=0; i<str.length()-2; i++)
if (str.substring(i, i+3).matches("co?e"))
counter++;
return counter;
}
我在想,也许匹配方法与子字符串不兼容,但我不确定。
答案 0 :(得分:2)
您需要使用正则表达式语法。在这种情况下,您需要"co\\we"
,其中\\w
表示任何字母。
BTW你可以做到
public static int countCode(String str) {
return str.split("co\\we", -1).length - 1;
}
答案 1 :(得分:1)
尝试在if语句中使用它。除非我将Java规则与PHP混合,否则它需要是+4而不是+3。
str.substring(i, i+4)
答案 2 :(得分:0)
public int countCode(String str) {
int count=0; // created a variable to count the appearance of "coe" in the string because d doesn't matter.
for(int i=0;i<str.length()-3;i++){
if(str.charAt(i)=='c'&&str.charAt(i+1)=='o'&&str.charAt(i+3)=='e'){
++count; // increment count if we found 'c' and 'o' and 'e' in the string.
}
}
return count; // returing the number of count 'c','o','e' appeared in string.
}
答案 3 :(得分:-2)
public class MyClass {
public static void main(String[] args) {
String str="Ramcodecopecofeacolecopecofeghfgjkfjfkjjcojecjcj BY HARSH RAJ";
int count=0;
for (int i = 0; i < str.length()-3; i++) {
if((str.substring(i, i+4)).matches("co[\\w]e")){
count++;
}
}
System.out.println(count);
}
}