查找一行中的文本在另一行中重复的次数

  • 本文关键字:一行 查找 文本 java charat
  • 更新时间 :
  • 英文 :


任务如下:找出PATTERN中的文本在text中重复了多少次。重复可能相互重叠。我们建议循环遍历TEXT中PATTERN可以开始的所有可能位置。在迭代时,检查循环中的每个位置,遍历PATTERN中的字符和从被迭代位置出发的字符。如果在检查过程中至少有一个字符不匹配,则位置不合适,我们继续进行下一个字符。否则,需要增加重复次数。

我理解,为了找出哪个字符在字符串中的第I个位置,使用charAt(I)方法,每个string类型的对象都有。

但具体是什么,我却想不起来

public class Main {
public static final String TEXT = "aaababaabaaaabaabaabaabaaababaabaaababaabaaaabaabaabaabbabaabaaababaababaabaabaabaaabbaab";
public static final String PATTERN = "aab";
public static void main(String[] args) {
int count = 0;
for (int i = 0; i < TEXT.length(); i++) {
int count = 1;

}
System.out.println("String " + PATTERN + " met in the text " + count + " times");
}
}

对于TEXT的每个i位置,如果它们与模式字符匹配,则需要查看n(模式长度)字符,对它们使用迭代

int count = 0;
boolean positionOk;
for (int i = 0; i < TEXT.length(); i++) {
positionOk = true;
for (int j = 0; j < PATTERN.length(); j++) {
if (TEXT.charAt(i + j) != PATTERN.charAt(j)) {
positionOk = false;
break;
}
}
if (positionOk) {
count += 1;
}
}

如果你不需要迭代,你可以使用String.startsWith(word, position)

for (int i = 0; i < TEXT.length(); i++) {
if (TEXT.startsWith(PATTERN, i)) {
count += 1;
}
}

@azro的回答也可以写成:

int count = 0;
L: for (int i = 0; i < TEXT.length(); i++) {
for (int j = 0; j < PATTERN.length(); j++) {
if (TEXT.charAt(i + j) != PATTERN.charAt(j)) {
continue L;
}
}
count++;
}

最新更新