import java.util.HashMap; import java.util.Map; final class NucleotideCounter { private final String sequence; NucleotideCounter(String sequence) { this.sequence = sequence; } int count(char base) { if (isCountable(base)) throw new IllegalArgumentException(base + " is not a nucleotide"); try { return nucleotideCounts().get(base); } catch (NullPointerException e) { return 0; } } private static boolean isCountable(char base) { final String COUNTABLE_NUCLEOTIDES = "ACGT"; return COUNTABLE_NUCLEOTIDES.indexOf(base) == -1; } Map nucleotideCounts() { Map counts = emptyCounts(); for (char c : sequence.toCharArray()) { counts.put(c, counts.get(c) + 1); } return counts; } private static Map emptyCounts() { Map counts = new HashMap(); counts.put('A', 0); counts.put('C', 0); counts.put('T', 0); counts.put('G', 0); return counts; } }