JavaRush /Java Blog /Random-TW /Java 字串。面試問題和答案,第 1 部分
Andrey
等級 26

Java 字串。面試問題和答案,第 1 部分

在 Random-TW 群組發布
該類別String是Java中使用最廣泛的類別之一。本文提供了一些重要的 Java String 面試問題和答案。 Java 字串。 面試問題和答案,第 1 - 1 部分他們將非常有助於您全面了解課程String,並幫助您為任何與課程相關的面試問題做好準備String

1.Java中的String是什麼?這是什麼資料型態?

String是Java中的一個類,定義在java.lang套件中。它不是像 int 和 long 這樣的原始資料型別。String 類別表示字串字元集。幾乎所有 Java 應用程式都使用字串,並且我們應該了解一些關於 String 類別的事實。immutable它是Java中的不可變(immutable )和最終確定的資料類型String,虛擬機器將該類別的所有物件儲存在字串池中。另一個特性是使用雙引號和重載「+」運算子進行連接來 String取得類別物件的方式。String

2. 建立 String 物件有哪些不同的方法?

我們可以像 Java 中的任何其他類別一樣使用 new 運算子建立對象,也可以使用雙引號來建立對象String。還有幾個類別構造函數String用於從字元數組、位元組數組以及使用StringBufferor獲取字串StringBuilder
String str = new String("abc");
String str1 = "abc";
當我們使用雙引號建立字串時,Java 虛擬機會在字串池中尋找具有相同值的另一個字串。如果找到字串,則僅傳回對該類別的現有物件的引用String,否則使用接收到的值建立新物件並將其儲存在池中。當我們使用new運算子時,虛擬機會建立一個對象String,但不會將其儲存在字串池中。我們可以使用該方法intern()將字串儲存在字串池中,或者如果池中已經存在這樣的字串,則取得參考。

3. 寫一個方法來檢查字串是否為回文。

如果一個字串在兩個方向上讀取相同,則稱為回文。例如,“aba”是一個回文字串。該類別String沒有提供任何反轉字串的方法,但類別StringBuffer確實StringBuilder有一個反轉方法,我們可以用它來檢查字串是否是回文。
private static boolean isPalindrome(String str) {
        if (str == null)
            return false;
        StringBuilder strBuilder = new StringBuilder(str);
        strBuilder.reverse();
        return strBuilder.toString().equals(str);
    }
有時面試官可能會要求不要使用其他類別進行此檢查,這種情況下我們可以比較字串兩邊的字元來檢查回文。
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. 寫一個從字串中刪除給定字元的方法。

我們可以使用一種方法replaceAll將所有出現的字串替換為另一個字串。請注意,該方法採用字串作為參數,因此我們使用該類別Character從字元建立字串,並使用它用空字串替換所有字元。
private static String removeChar(String str, char ch) {
        if (str == null)
            return null;
        return str.replaceAll(Character.toString(ch), "");
    }

5. 如何將字串轉換為大寫或小寫?

我們可以使用類別方法String toUpperCasetoLowerCace取得大寫和小寫字串。這些方法有一個重載,它接受一個參數Locale並使用其本地化規則將字串轉換為大寫或小寫。

6. subSequence 方法有什麼作用?

Java 1.4引入了接口CharSequence,類別繼承這個接口,這是在類別中String實現方法的唯一原因。它在內部調用. 使用該方法的一個簡單範例: subSequenceStringsubstring
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))));
    }
}
程式的輸出將顯示以下內容:
Last 4 char String: .com
First 4 char String: www.
website name: journaldev
substring == subSequence ? false
substring equals subSequence ? true
理想情況下,您應該始終使用substring.

7. Java中如何比較兩個字串?

該類別String繼承了介面Comparable並有兩個方法選項compareTo()。此方法依字典順序compareTo(String anotherString)將物件String與接收到的參數進行比較String。如果目前行位於接收到的字串之前,則該方法傳回負整數,如果該字串位於接收到的參數之後,則傳回正整數integer。如果該方法傳回 0,則該字串具有相同的值,在這種情況下該方法equals(String str)也會傳回 true。 compareToIgnoreCase(String str):此方法與前一種類似,只是忽略大小寫。它使用 CASE_INSENSITIVE_ORDER 比較器進行不區分大小寫的比較。如果傳回值為零,則該方法equalsIgnoreCase(String str)也會傳回 true。讓我們來看一個小例子來解釋這些方法:
public class StringCompareToExample {
    public static void main(String[] args) {
        String str = "ABC";
        System.out.println(str.compareTo("DEF"));
        System.out.println(str.compareToIgnoreCase("abc"));
    }
}
該程式將輸出以下內容:
-3
0

8. 如何將字串轉換為字符,反之亦然?

這是一個棘手的問題,因為字串是字元序列,因此我們只能將其轉換為單一字元。我們可以使用方法charAt來取得位於指定位置的字符,也可以使用方法toCharArray()將字串轉換為字元陣列。一個簡單的例子展示瞭如何在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 ), "");
    }
}
該程式將輸出以下內容:
String to char array: [1, 2, 3]
String to char: 2
char to String: 2
removing all chars from String: ABCD2DW

9. 如何將字串轉換為位元組數組,反之亦然?

我們可以使用方法getBytes()將字串轉換為位元組數組,也可以使用建構子new String(byte[] arr)將位元組數組轉換為字串。
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)));
    }
}
該程式將輸出以下內容:
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. 我們可以在 switch 結構中使用字串嗎?

這個棘手的問題用於測試您對該語言當前發展的了解。Java 7 擴展了switch 語句以使用字串;早期版本的 Java 不支援這一點。如果要實作字串的條件流,則可以使用 if-else 條件,並且如果使用 Java 7 或更高版本,則可以使用 switch 語句。在語句中使用字串的小範例switch以及使用條件顯示相同邏輯的另一種方法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");
        }
    }
}
該程式將輸出以下內容:
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)
Java 中字串的關鍵使用點switch
  • 在設計中使用字串switch可以消除多個條件鏈,從而使程式碼更具可讀性if-else
  • 中的字串switch區分大小寫,上面的範例說明了這一點。
  • 運算子switch使用一種方法String.equals()將結果值與case值進行比較,因此新增對 NULL 的檢查以避免NullPointerException
  • 根據 Java 7 中字串的文檔switch,Java 編譯器為構造中的字串產生switch比串聯條件更有效的字節碼if-else
  • 確保這將與 Java 7 或更高版本一起使用,否則您將得到xception.

11. 寫一個程式來列印字串的所有排列。

這是一個棘手的問題,我們必須使用遞歸來找到字串的所有排列,例如「AAB」的排列可能是「AAB」、「ABA」和「BAA」。我們還需要使用 Set 來確保沒有重複的行。為了獲得所有排列,我們首先取得字串的第一個字元並重新排列其餘字元。如果 String = “ABC” 第一個字元 char = A,其餘排列 BC 和 CB。現在我們可以將第一個字元插入到排列中的可用位置。BC -> ABC、BAC、BCA CB -> ACB、CAB、CBA 範例程式:
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));
    }
}
程式輸出:
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]
文章的繼續
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION