Rumah > Java > javaTutorial > Contoh rentetan alfanumerik jenis java

Contoh rentetan alfanumerik jenis java

James Robert Taylor
Lepaskan: 2025-03-07 17:28:25
asal
1029 orang telah melayarinya

Java menyusun rentetan alfanumerik Contoh

Contoh ini menunjukkan menyusun senarai tali alfanumer di Java menggunakan komparator tersuai. Kami akan menggunakan rentetan dan kaedah List, yang membolehkan kami menentukan logik penyortiran tersuai. Kaedah terbina dalam Collections.sort() menggunakan jenis gabungan yang sangat dioptimumkan, yang menyediakan kerumitan masa O (N log n) dalam kes-kes purata dan terburuk. Walau bagaimanapun, kecekapan sangat bergantung pada

yang anda sediakan. Oleh itu, anda mesti melaksanakan adat
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class AlphanumericSort {

    public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("apple1");
        strings.add("apple10");
        strings.add("apple2");
        strings.add("banana1");
        strings.add("banana20");
        strings.add("banana10");
        strings.add("apple");


        // Sort using a custom comparator
        Collections.sort(strings, new AlphanumericComparator());

        System.out.println("Sorted strings:");
        for (String str : strings) {
            System.out.println(str);
        }
    }

    static class AlphanumericComparator implements Comparator<String> {
        @Override
        public int compare(String s1, String s2) {
            int i = 0;
            while (i < s1.length() && i < s2.length()) {
                char c1 = s1.charAt(i);
                char c2 = s2.charAt(i);

                if (Character.isDigit(c1) && Character.isDigit(c2)) {
                    int num1 = 0;
                    int num2 = 0;
                    while (i < s1.length() && Character.isDigit(s1.charAt(i))) {
                        num1 = num1 * 10 + (s1.charAt(i) - '0');
                        i++;
                    }
                    while (i < s2.length() && Character.isDigit(s2.charAt(i))) {
                        num2 = num2 * 10 + (s2.charAt(i) - '0');
                        i++;
                    }
                    return Integer.compare(num1, num2);
                } else if (Character.isDigit(c1)) {
                    return 1; // Digits come after letters
                } else if (Character.isDigit(c2)) {
                    return -1; // Digits come after letters
                } else if (c1 != c2) {
                    return c1 - c2; // Compare characters
                } else {
                    i++;
                }
            }
            return s1.length() - s2.length(); // Compare lengths if prefixes are equal

        }
    }
}
Salin selepas log masuk
yang betul mengendalikan sifat alfanumerik rentetan. Contoh di atas menunjukkan komparator sedemikian. Pembanding ini mengepam rentetan, memisahkan bahagian abjad dan angka, dan membandingkannya dengan sewajarnya. Pendekatan ini mengelakkan penukaran rentetan yang tidak perlu atau perpustakaan luaran, yang membawa kepada penyortiran yang cekap.
  • Pesanan leksikografi: Perbandingan rentetan standard merawat nombor secara lexicographically. Ini bermakna "10" dianggap kurang daripada "2," yang tidak betul untuk menyusun alfanumerik. Sentiasa gunakan Custom Comparator untuk mengendalikan bahagian angka sebagai nombor, bukan rentetan. Ia perlu membandingkan bahagian abjad terlebih dahulu dan kemudian bahagian angka, memastikan pesanan yang betul. Zeros terkemuka tidak boleh menjejaskan perintah penyortiran.
  • Elakkan manipulasi rentetan yang tidak perlu atau penukaran dalam logik perbandingan. Contoh di atas menunjukkan pendekatan yang cekap yang meminimumkan overhead. Pertimbangkan untuk menambahkan cek untuk nilai dan mengendalikannya dengan sewajarnya. Perpustakaan seperti Apache Commons Lang menawarkan utiliti yang mungkin membantu dalam manipulasi rentetan (mis., Mengekstrak bahagian angka), tetapi mereka tidak secara langsung menyediakan penyusun alfanumerik yang siap sedia. Mewujudkan adat adalah pendekatan yang paling berkesan dan langsung untuk tugas ini, kerana ia membolehkan anda untuk mengawal logik penyortiran dengan tepat untuk memenuhi keperluan khusus anda. Menggunakan perpustakaan luaran mungkin menambah overhead dan kebergantungan yang tidak perlu.

Atas ialah kandungan terperinci Contoh rentetan alfanumerik jenis java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan