Java程序查找具有重复计数的字符串中的重复字符

时间:2020-01-09 10:35:33  来源:igfitidea点击:

编写Java程序以在字符串中查找重复次数众多的采访中重复的字符。这篇文章提供了两种方法来编写此问题的程序。

1我们可以使用HashMap在字符串中查找重复字符以及重复计数。
2如果要求我们不使用任何内置结构或者API,则可以编写逻辑以使用for循环在String中查找重复字符。

使用HashMap在String Java程序中查找重复的字符

在HashMap中,我们可以通过以下方式存储每个字符:该字符成为键,并且计数为值。对于每个字符,请在HashMap中检查char是否已经存在;如果是,则为现有字符增加计数,如果否,则将字符添加到HashMap中,初始计数为1.

public class DuplicateChars {
  public static void main(String[] args) {
    findDuplicateChars("How many duplicates in this string");
    findDuplicateChars("Addis Ababa");
  }
	
  private static void findDuplicateChars(String str) {
    System.out.println("Duplicates in- "+ str);
    char[] strArr = str.toCharArray();
    Map<Character, Integer> charMap = new HashMap<>();
    for(char c : strArr) {
      // Ignore spaces
      if(c == ' ')
        continue;
      // check if character already exists
      if(charMap.containsKey(c)) {
        charMap.put(c, charMap.get(c) + 1);
      }else {
        charMap.put(c, 1);
      }
    }
    // Iterating collection view of the Map
    Set<Map.Entry<Character, Integer>> countSet = charMap.entrySet();
    for(Map.Entry<Character, Integer> entry  : countSet){
      if(entry.getValue() > 1) {
        System.out.println(entry.getKey() + " found " + entry.getValue() + " times");
      }
    }
  }
}

输出:

Duplicates in- How many duplicates in this string
a found 2 times
i found 4 times
n found 3 times
s found 3 times
t found 3 times
Duplicates in- Addis Ababa
A found 2 times
a found 2 times
b found 2 times
d found 2 times

使用循环在String Java程序中查找重复字符

如果我们需要编写逻辑来自己查找重复项,则可以使用外部和内部for循环来执行此操作。在外循环中,一次将String迭代一次,然后在内循环中,对String扫描相同的字符。如果找到它的增量计数。

public class DuplicateChars {
	public static void main(String[] args) {
		findDuplicateChars("How many duplicates in this string");
		findDuplicateChars("Addis Ababa");
	}
	
	private static void findDuplicateChars(String str) {
		System.out.println("Duplicates in- "+ str);
		int count;
		for(int i = 0; i < str.length(); i++) {
			// get a character
			char c = str.charAt(i);
			//starting count for any character
			count = 1;
			//ignore spaces
			if(c == ' ') 
				continue;
			for(int j = i + 1; j < str.length(); j++) {
				if(c == str.charAt(j)) {
				 count++;
				 // remove the char which is already counted
				 str = str.substring(0, j) + str.substring(j+ 1);
				}
			}
			if(count > 1) {
				System.out.println(c + " found " + count + " times");
			}
		}
	}
}