Cần giải thích đoạn code put vào biến counter

Ai giải thích cho em dòng này đc ko ạ. Em cảm ơn ạ

if (!charCounter.containsKey(ch)) { charCounter.put(ch, 1); } else { charCounter.put(ch, ((int) charCounter.get(ch)) + 1); }
package counter;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.StringTokenizer;

/**
*
* @author Admin
*/
public class Counter {

private Map<Character, Integer> charCounter =
new HashMap<Character, Integer>();

private Map<String, Integer> wordCounter =
new HashMap<String, Integer>();

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter your content: ");
String content = scanner.nextLine();

Counter counter = new Counter();
counter.analyze(content);
counter.display();
}

public void display() {
System.out.println(wordCounter);
System.out.println(charCounter);
}

public void analyze(String content) {
for (char ch : content.toCharArray()) {
if (Character.isSpaceChar(ch)) continue;
if (!charCounter.containsKey(ch)) {
charCounter.put(ch, 1);
} else {
charCounter.put(ch, ((int) charCounter.get(ch)) + 1);
}
}
StringTokenizer tokenizer = new StringTokenizer(content);
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
if (!wordCounter.containsKey(token)) {
wordCounter.put(token, 1);
} else {
wordCounter.put(token, ((int) wordCounter.get(token)) + 1);
}
}
}
}

Nếu charCounter không chứa kí tự ch thì thêm nó vào và đếm là 1. Còn đã chứa thì thên nó vào và đếm là (số đếm ch hiện tại) + 1

Này mục đích tránh NullPointerException. Bạn có thể thử bỏ lệnh ở if để test thử. charCounter.put(ch, ((int) charCounter.get(ch)) + 1) sẽ throw lỗi vì nếu charCounter không chứa ‘ch’ thì sẽ trể về null. Null không convert sang int được.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?