Cara mendapatkan aksara yang berbeza dan nombornya dalam rentetan
Soalan ini boleh dipecahkan kepada dua langkah Langkah pertama ialah mencari aksara yang berbeza untuk mencari aksara yang berbeza Langkah 1, hitung nombor mereka. Nampak agak mengarut, kan?
public class DistinctCharsCount { public static void main(String[] args) { printDistinctCharsWithCount("itwanger"); printDistinctCharsWithCount("chenmowanger"); } private static void printDistinctCharsWithCount(String input) { Map<Character, Integer> charsWithCountMap = new LinkedHashMap<>(); for (char c : input.toCharArray()) { Integer oldValue = charsWithCountMap.get(c); int newValue = (oldValue == null) ? 1 : Integer.sum(oldValue, 1); charsWithCountMap.put(c, newValue); } System.out.println(charsWithCountMap); } }
Hasil keluaran program ialah:
{i=1, t=1, w=1, a=1, n=1, g=1, e=1, r=1} {c=1, h=1, e=2, n=2, m=1, o=1, w=1, a=1, g=1, r=1}
Biar saya bercakap tentang idea saya:
1) Isytihar LinkedHashMap, anda juga boleh menggunakan HashMap , tetapi yang pertama boleh Mengekalkan susunan rentetan selepas membelah, dan hasilnya akan kelihatan lebih jelas sepintas lalu.
Mengapa menggunakan Map? Kerana kunci Map tidak dibenarkan untuk diulang, dan ia hanya boleh menambah bilangan aksara berulang.
2) Pisahkan rentetan kepada aksara dan lintasan.
3) Jika kekuncinya batal, ini bermakna nombornya ialah +1, sebaliknya, +1 ditambahkan pada nilai sebelumnya, dan kemudian dimasukkan semula ke dalam Peta, sekali gus menimpa bilangan aksara sebelumnya. .
Pemikiran itu sangat jelas, bukan?
Nah, selepas JDK 8, Map menambah kaedah merge(), yang memberikan nilai kepada berbilang kunci sekaligus:
private static void printDistinctCharsWithCountMerge(String input) { Map<Character, Integer> charsWithCountMap = new LinkedHashMap<>(); for (char c : input.toCharArray()) { charsWithCountMap.merge(c, 1, Integer::sum); } System.out.println(charsWithCountMap); }
Bukankah ia sangat berkuasa? satu baris kod Selesai. Parameter pertama ialah kunci, parameter kedua ialah nilai, dan parameter ketiga ialah BiFunction, yang bermaksud jika kunci sudah wujud, kira semula nilai baharu berdasarkan BiFunction.
Jika aksara muncul buat kali pertama, tetapkan nilai 1 jika tidak, jumlahkan nilai sebelumnya kepada 1.
Atas ialah kandungan terperinci Bagaimana untuk mendapatkan aksara yang berbeza dan nombor mereka dalam rentetan di java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!