JavaRush /Blog Java /Random-MS /Rentetan Java. Soalan dan jawapan temu bual, bahagian 1
Andrey
Tahap

Rentetan Java. Soalan dan jawapan temu bual, bahagian 1

Diterbitkan dalam kumpulan
Kelas Stringadalah salah satu kelas yang paling banyak digunakan di Jawa. Artikel ini menyediakan beberapa soalan dan jawapan temu bual Java String yang penting. Rentetan Java.  Soalan dan jawapan temu bual, bahagian 1 - 1Mereka akan sangat membantu dalam mendapatkan gambaran lengkap tentang kelas dan akan menyediakan anda untuk sebarang soalan temuduga Stringberkaitan kelas .String

1. Apakah String dalam Java? Apakah jenis data ini?

String ialah kelas dalam Java yang ditakrifkan dalam pakej java.lang. Ia bukan jenis data primitif seperti int dan long. Kelas String mewakili set aksara rentetan. String digunakan di hampir semua aplikasi Java dan terdapat beberapa fakta yang perlu kita ketahui tentang kelas String. Ia adalah immutablejenis data yang tidak boleh diubah ( ) dan dimuktamadkan dalam Java dan Stringmesin maya menyimpan semua objek kelas dalam kumpulan rentetan. Ciri lain Stringialah cara untuk mendapatkan objek kelas Stringmenggunakan petikan berganda dan melebihkan pengendali "+" untuk penggabungan.

2. Apakah cara yang berbeza untuk mencipta objek String?

Kita boleh mencipta objek menggunakan operator baharu sama seperti kelas lain di Java atau kita boleh menggunakan petikan berganda untuk mencipta objek String. Terdapat juga beberapa pembina kelas Stringuntuk mendapatkan rentetan daripada tatasusunan aksara, tatasusunan bait, dan juga menggunakan StringBufferatau StringBuilder.
String str = new String("abc");
String str1 = "abc";
Apabila kita mencipta rentetan menggunakan petikan berganda, Mesin Maya Java melihat dalam kolam rentetan untuk rentetan lain dengan nilai yang sama. Jika rentetan ditemui, maka hanya rujukan kepada objek sedia ada kelas dikembalikan String, jika tidak objek baharu dicipta dengan nilai yang diterima dan disimpan dalam kolam. Apabila kita menggunakan pengendali baharu, mesin maya mencipta objek Stringtetapi tidak menyimpannya dalam kumpulan rentetan. Kita boleh menggunakan kaedah intern()untuk menyimpan rentetan dalam kolam rentetan, atau dapatkan rujukan jika rentetan tersebut sudah ada dalam kolam.

3. Tulis kaedah untuk menyemak sama ada rentetan adalah palindrom.

Rentetan dipanggil palindrom jika ia membaca sama dalam kedua-dua arah. Sebagai contoh, "aba" ialah rentetan palindromik. Kelas Stringtidak menyediakan sebarang kaedah untuk menterbalikkan rentetan, tetapi kelas StringBuffermempunyai StringBuilderkaedah membalikkan yang mana kita boleh menyemak sama ada rentetan kita ialah palindrom atau tidak.
private static boolean isPalindrome(String str) {
        if (str == null)
            return false;
        StringBuilder strBuilder = new StringBuilder(str);
        strBuilder.reverse();
        return strBuilder.toString().equals(str);
    }
Kadangkala penemuduga mungkin meminta untuk tidak menggunakan kelas lain untuk semakan ini, dalam hal ini kita boleh membandingkan aksara dalam rentetan pada kedua-dua belah untuk menyemak palindrom.
private static boolean isPalindromeString(String str) {
        if (str == null)
            return false;
        int length = str.length();
        System.out.println(length / 2);
        for (int i = 0; i < length / 2; i++) {

            if (str.charAt(i) != str.charAt(length - i - 1))
                return false;
        }
        return true;
    }

4. Tulis kaedah untuk mengeluarkan aksara yang diberikan daripada rentetan.

Kita boleh menggunakan kaedah replaceAlluntuk menggantikan semua kejadian rentetan dengan rentetan lain. Ambil perhatian bahawa kaedah mengambil rentetan sebagai hujah, jadi kami menggunakan kelas Characteruntuk mencipta rentetan daripada aksara dan menggunakannya untuk menggantikan semua aksara dengan rentetan kosong.
private static String removeChar(String str, char ch) {
        if (str == null)
            return null;
        return str.replaceAll(Character.toString(ch), "");
    }

5. Bagaimanakah kita boleh menukar rentetan kepada huruf besar atau huruf kecil?

Kita boleh menggunakan kaedah kelas String toUpperCaseuntuk toLowerCacemendapatkan rentetan huruf besar dan huruf kecil. Kaedah ini mempunyai beban berlebihan yang memerlukan hujah Localedan menggunakan peraturan penyetempatannya untuk menukar rentetan kepada huruf besar atau kecil.

6. Apakah yang dilakukan oleh kaedah subSequence?

Java 1.4 memperkenalkan antara muka CharSequence, kelas Stringmewarisi antara muka ini dan itulah satu-satunya sebab untuk melaksanakan kaedah subSequencedalam kelas String. Secara dalaman ia memanggil substring. Contoh mudah menggunakan kaedah:
public class StringSubsequence {

    public static void main(String[] args) {
        String str = "www.journaldev.com";
        System.out.println("Last 4 char String: "+str.subSequence(str.length()-4, str.length()));
        System.out.println("First 4 char String: "+str.subSequence(0, 4));
        System.out.println("website name: "+str.subSequence(4, 14));

        //substring vs subSequence
        System.out.println("substring == subSequence ? "
			+(str.substring(4, 14) == str.subSequence(4, 14)));

        System.out.println("substring equals subSequence ? "
			+(str.substring(4, 14).equals(str.subSequence(4, 14))));
    }
}
Output program akan menunjukkan perkara berikut:
Last 4 char String: .com
First 4 char String: www.
website name: journaldev
substring == subSequence ? false
substring equals subSequence ? true
Sebaik-baiknya anda harus sentiasa menggunakan substring.

7. Bagaimana untuk membandingkan dua rentetan dalam Java?

Kelas Stringmewarisi antara muka Comparabledan mempunyai dua pilihan kaedah compareTo(). Kaedah compareTo(String anotherString)membandingkan objek Stringdengan hujah yang diterima Stringsecara leksikografi. Jika baris semasa mendahului rentetan yang diterima, kaedah itu mengembalikan integer negatif, dan jika rentetan itu mengikuti hujah yang diterima, ia mengembalikan integer positif integer. Jika kaedah mengembalikan 0, maka rentetan mempunyai nilai yang sama, dalam hal ini kaedah equals(String str)juga akan kembali benar. compareToIgnoreCase(String str): Kaedah ini serupa dengan yang sebelumnya kecuali ia mengabaikan kes. Ia menggunakan CASE_INSENSITIVE_ORDER Comparator untuk perbandingan tidak peka huruf besar-besaran. Jika nilai pulangan adalah sifar, maka kaedah itu equalsIgnoreCase(String str)juga akan kembali benar. Mari lihat contoh kecil untuk menerangkan kaedah ini:
public class StringCompareToExample {
    public static void main(String[] args) {
        String str = "ABC";
        System.out.println(str.compareTo("DEF"));
        System.out.println(str.compareToIgnoreCase("abc"));
    }
}
Program ini akan mengeluarkan yang berikut:
-3
0

8. Bagaimana untuk menukar rentetan kepada aksara dan sebaliknya?

Ini ialah soalan muslihat kerana rentetan ialah urutan aksara, jadi kita hanya boleh menukarnya kepada satu aksara. Kita boleh menggunakan kaedah charAtuntuk mendapatkan aksara yang terletak pada kedudukan yang ditentukan atau kita boleh menggunakan kaedah toCharArray()untuk menukar rentetan kepada tatasusunan aksara. Contoh mudah yang menunjukkan cara menukar rentetan kepada aksara dan aksara kepada rentetan dalam Java.
import java.util.Arrays;

public class StringToCharToString {
    public static void main(String[] args) {
        //String to char array
        String str = "123";
        char[] chArr = str.toCharArray();
        System.out.println("String to char array: "+Arrays.toString(chArr));
        //String to char
        char c = str.charAt(1);
        System.out.println("String to char: "+c);
        //char to String
        String s = Character.toString(c);
        System.out.println("char to String: "+s);
        //удалить все заданные символы из строки
        System.out.println("removing all chars from String: "
                                 +removeCharFromString("1ABCD12DW", '1'));
    }

    private static String removeCharFromString(String str, char c) {
        return str.replaceAll(Character.toString( c ), "");
    }
}
Program ini akan mengeluarkan yang berikut:
String to char array: [1, 2, 3]
String to char: 2
char to String: 2
removing all chars from String: ABCD2DW

9. Bagaimana untuk menukar rentetan kepada tatasusunan bait dan sebaliknya?

Kita boleh menggunakan kaedah getBytes()untuk menukar rentetan kepada tatasusunan bait dan kita boleh menggunakan pembina new String(byte[] arr)untuk menukar tatasusunan bait kepada rentetan.
import java.util.Arrays;

public class StringByteArray {
     public static void main(String[] args) {
        String str = "www.journaldev.com";
        //преобразование String в byte array
        byte[] byteArr = str.getBytes();
        System.out.println("String to byte array : "+Arrays.toString(byteArr));
        //преобразование byte array и String
        String str1 = new String(byteArr);
        System.out.println("byte array to String : "+str1);
        //посмотрим, str и str1 одинаковые or нет
        System.out.println("str == str1? " + (str == str1));
        System.out.println("str.equals(str1)? " + (str.equals(str1)));
    }
}
Program ini akan mengeluarkan yang berikut:
String to byte array : [119, 119, 119, 46, 106, 111, 117, 114, 110, 97, 108, 100, 101, 118, 46, 99, 111, 109]
byte array to String : www.journaldev.com
str == str1? false
str.equals(str1)? true

10. Bolehkah kita menggunakan rentetan dalam binaan suis?

Soalan rumit ini digunakan untuk menguji pengetahuan anda tentang perkembangan bahasa semasa. Java 7 memanjangkan pernyataan suis untuk menggunakan rentetan; versi Java terdahulu tidak menyokong ini. Jika anda melaksanakan aliran bersyarat untuk rentetan, anda boleh menggunakan syarat if-else dan anda boleh menggunakan pernyataan suis jika anda menggunakan Java 7 atau lebih baru. Contoh kecil menggunakan rentetan dalam pernyataan switchdan kaedah lain yang menunjukkan logik yang sama menggunakan syarat if-else.
public class SwitchStringExample {

    public static void main(String[] args) {
        printColorUsingSwitch("red");
        printColorUsingIf("red");
        // оператор switch регистрозависимый
        printColorUsingSwitch("RED");
        printColorUsingSwitch(null);
    }

    private static void printColorUsingIf(String color) {
        if (color.equals("blue")) {
            System.out.println("BLUE");
        } else if (color.equals("red")) {
            System.out.println("RED");
        } else {
            System.out.println("INVALID COLOR CODE");
        }
    }

    private static void printColorUsingSwitch(String color) {
        switch (color) {
        case "blue":
            System.out.println("BLUE");
            break;
        case "red":
            System.out.println("RED");
            break;
        default:
            System.out.println("INVALID COLOR CODE");
        }
    }
}
Program ini akan mengeluarkan yang berikut:
RED
RED
INVALID COLOR CODE
Exception in thread "main"
java.lang.NullPointerException
    at com.journaldev.util.SwitchStringExample.printColorUsingSwitch(SwitchStringExample.java:24)
    at com.journaldev.util.SwitchStringExample.main(SwitchStringExample.java:10)
Titik penggunaan utama switchuntuk rentetan dalam Java.
  • menggunakan rentetan dalam reka bentuk switchmenjadikan kod lebih mudah dibaca dengan menghapuskan berbilang rantaian syarat if-else.
  • rentetan dalam adalah switchsensitif huruf besar-besaran, contoh di atas menunjukkan ini.
  • operator switchmenggunakan kaedah String.equals()untuk membandingkan nilai yang terhasil dengan nilai kes , jadi tambahkan semakan untuk NULL untuk mengelakkan NullPointerException.
  • Menurut dokumentasi Java 7 untuk rentetan dalam switch, pengkompil Java menjana kod bait yang lebih cekap untuk rentetan dalam binaan switchberbanding untuk keadaan bercantum if-else.
  • pastikan ini akan digunakan dengan Java 7 atau lebih baru, jika tidak, anda akan mendapat xception.

11. Tulis atur cara yang mencetak semua pilihatur rentetan.

Ini adalah soalan rumit dan kita perlu menggunakan rekursi untuk mencari semua pilih atur rentetan, contohnya pilih atur "AAB" boleh menjadi "AAB", "ABA" dan "BAA". Kita juga perlu menggunakan Set untuk memastikan kita tidak mempunyai baris pendua. Untuk mendapatkan semua pilih atur, kita mula-mula mengambil aksara pertama rentetan dan menyusun semula aksara yang tinggal. Jika String = “ABC” Aksara pertama aksara = A dan baki pilih atur BC dan CB. Sekarang kita boleh memasukkan aksara pertama ke dalam kedudukan yang tersedia dalam pilih atur. BC -> ABC, BAC, BCA CB -> ACB, CAB, CBA Contoh program:
import java.util.HashSet;
import java.util.Set;

public class StringHelper {
    public static Set<String> permutationFinder(String str) {
        Set<String> perm = new HashSet<String>();
        //Handling error scenarios
        if (str == null) {
            return null;
        } else if (str.length() == 0) {
            perm.add("");
            return perm;
        }
        char initial = str.charAt(0); // первый символ
        String rem = str.substring(1); // полная строка без первого символа
        Set<String> words = permutationFinder(rem);
        for (String strNew : words) {
            for (int i = 0;i<=strNew.length();i++){
                perm.add(charInsert(strNew, initial, i));
            }
        }
        return perm;
    }

    public static String charInsert(String str, char c, int j) {
        String begin = str.substring(0, j);
        String end = str.substring(j);
        return begin + c + end;
    }

    public static void main(String[] args) {
        String s = "AAC";
        String s1 = "ABC";
        String s2 = "ABCD";
        System.out.println("\nPermutations for " + s + " are: \n" + permutationFinder(s));
        System.out.println("\nPermutations for " + s1 + " are: \n" + permutationFinder(s1));
        System.out.println("\nPermutations for " + s2 + " are: \n" + permutationFinder(s2));
    }
}
Output program:
Permutations for AAC are:
[AAC, ACA, CAA]

Permutations for ABC are:
[ACB, ABC, BCA, CBA, CAB, BAC]

Permutations for ABCD are:
[DABC, CADB, BCAD, DBAC, BACD, ABCD, ABDC, DCBA, ADBC, ADCB, CBDA, CBAD, DACB, ACBD, CDBA, CDAB, DCAB, ACDB, DBCA, BDAC, CABD, BADC, BCDA, BDCA]
Sambungan artikel
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION