字符串模式匹配 要求1.找出子串在父串首次出现的位置2.子串在父串出现的所有位置.3将子串在父串的字符替换成新串。4 用测试类完成。
时间: 2024-02-15 07:04:42 浏览: 52
C++实现了4个经典的字符串模式匹配算法:BF、RK、KMP和BM.zip
好的,下面是字符串模式匹配的代码实现:
```java
public class StringMatch {
// 找出子串在父串首次出现的位置
public int findFirstIndex(String parent, String sub) {
int parentLen = parent.length();
int subLen = sub.length();
for (int i = 0; i <= parentLen - subLen; i++) {
if (parent.substring(i, i + subLen).equals(sub)) {
return i;
}
}
return -1;
}
// 子串在父串出现的所有位置
public List<Integer> findAllIndex(String parent, String sub) {
List<Integer> result = new ArrayList<>();
int parentLen = parent.length();
int subLen = sub.length();
for (int i = 0; i <= parentLen - subLen; i++) {
if (parent.substring(i, i + subLen).equals(sub)) {
result.add(i);
}
}
return result;
}
// 将子串在父串的字符替换成新串
public String replace(String parent, String sub, String newStr) {
int parentLen = parent.length();
int subLen = sub.length();
StringBuilder result = new StringBuilder();
for (int i = 0; i <= parentLen - subLen; ) {
if (parent.substring(i, i + subLen).equals(sub)) {
result.append(newStr);
i += subLen;
} else {
result.append(parent.charAt(i));
i++;
}
}
if (parentLen < subLen || !parent.substring(parentLen - subLen).equals(sub)) {
result.append(parent.substring(parentLen - subLen + 1));
}
return result.toString();
}
}
```
这里我们创建了一个 `StringMatch` 类,其中包含三个方法:
- `findFirstIndex`:找出子串在父串首次出现的位置。
- `findAllIndex`:子串在父串出现的所有位置。
- `replace`:将子串在父串的字符替换成新串。
接下来是测试类的代码示例:
```java
public class StringMatchTest {
public static void main(String[] args) {
String parent = "hello, world! hello, Java!";
String sub = "hello";
String newStr = "hi";
StringMatch stringMatch = new StringMatch();
// 找出子串在父串首次出现的位置
int firstIndex = stringMatch.findFirstIndex(parent, sub);
System.out.println("子串在父串首次出现的位置:" + firstIndex);
// 子串在父串出现的所有位置
List<Integer> allIndex = stringMatch.findAllIndex(parent, sub);
System.out.println("子串在父串出现的所有位置:" + allIndex);
// 将子串在父串的字符替换成新串
String replacedStr = stringMatch.replace(parent, sub, newStr);
System.out.println("将子串在父串的字符替换成新串:" + replacedStr);
}
}
```
这里我们创建了一个 `StringMatchTest` 类,在 `main` 方法中实例化了 `StringMatch` 对象,并调用了其三个方法,分别输出了结果。
阅读全文