java 写一个2个字符串字段查重工具类 得出百分占比 举例
时间: 2024-10-23 13:11:50 浏览: 11
在Java中,我们可以创建一个名为`StringDuplicateChecker`的工具类,用于检测两个字符串字段之间的重复字符占比。下面是一个简单的示例:
```java
import java.util.HashMap;
import java.util.Map;
public class StringDuplicateChecker {
public static double getDuplicatesRatio(String str1, String str2) {
// 创建哈希映射来存储每个字符串的字符及其频率
Map<Character, Integer> charCount1 = countCharacters(str1);
Map<Character, Integer> charCount2 = countCharacters(str2);
// 合并两个映射
charCount1.putAll(charCount2);
// 计算只在其中一个字符串中出现的字符数
int uniqueCharsInBoth = calculateUniqueChars(charCount1, str1.length(), str2.length());
// 总字符数
int totalChars = str1.length() + str2.length();
// 计算重复字符的百分比
double duplicateRatio = (totalChars - uniqueCharsInBoth) / totalChars * 100;
return duplicateRatio;
}
private static Map<Character, Integer> countCharacters(String str) {
Map<Character, Integer> map = new HashMap<>();
for (char c : str.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
return map;
}
private static int calculateUniqueChars(Map<Character, Integer> combinedMap, int str1Len, int str2Len) {
int uniqueInStr1 = 0;
for (int count : combinedMap.values()) {
if (count == 1 && str1Len > 0) { // 如果字符只在str1出现一次
uniqueInStr1++;
str1Len--;
}
}
int uniqueInStr2 = str2Len - str1Len; // 已经计算过str1中的一次性字符,剩余的是str2独有的
return uniqueInStr1 + uniqueInStr2;
}
public static void main(String[] args) {
String str1 = "hello";
String str2 = "worldhello";
System.out.printf("The duplicate character ratio between '%s' and '%s' is %.2f%%.\n", str1, str2, getDuplicatesRatio(str1, str2));
}
}
```
在这个例子中,`getDuplicatesRatio`方法接受两个字符串作为输入,计算它们的重复字符比例。首先,它分别计算每个字符串中的字符频率,然后合并这两个频率表。接着,它找出仅在一个字符串中出现的字符,最后计算重复字符占总字符的比例。
阅读全文