两个字符串找相同java
时间: 2024-10-14 19:12:11 浏览: 24
在Java中,如果你想要找出两个字符串之间的相同部分,你可以使用`equals()`、`compareTo()`、或者`substring()`等方法结合循环来实现。以下是几种常见的方法:
1. **暴力匹配** (不推荐,效率低):
```java
public String findCommon(String str1, String str2) {
int maxLength = Math.min(str1.length(), str2.length());
for (int i = 0; i < maxLength; i++) {
if (str1.charAt(i) == str2.charAt(i)) {
return str1.substring(0, i + 1);
}
}
return "";
}
```
这个方法逐个比较字符,一旦找到不相同的,就返回已比较的部分。
2. **使用StringBuilder和indexOf()**:
```java
public String findCommon(String str1, String str2) {
StringBuilder common = new StringBuilder();
int index1 = 0, index2 = 0;
while ((index1 = str1.indexOf(str2.substring(index2), index1 + 1)) != -1) {
common.append(str2.substring(index2, index1));
index2 = index1 + 1;
}
if (index2 < str2.length()) {
common.append(str2.substring(index2)); // 如果str2剩余部分与str1相等,则添加
}
return common.toString();
}
```
这种方法使用了`indexOf()`函数查找公共部分,并不断更新索引。
3. **使用HashMap存储频率统计** (更高效):
```java
Map<Character, Integer> charCount1 = getCharacterFrequency(str1);
Map<Character, Integer> charCount2 = getCharacterFrequency(str2);
String common = "";
for (char c : charCount1.keySet()) {
if (charCount2.containsKey(c) && charCount1.get(c) == charCount2.get(c)) {
common += c;
}
}
return common;
private Map<Character, Integer> getCharacterFrequency(String str) {
Map<Character, Integer> count = new HashMap<>();
for (char c : str.toCharArray()) {
count.put(c, count.getOrDefault(c, 0) + 1);
}
return count;
}
```
这里先计算每个字符串中每个字符的频率,然后比较它们是否相等。
阅读全文