該類別
String
是Java中使用最廣泛的類別之一。本文提供了一些重要的 Java String 面試問題和答案。 他們將非常有助於您全面了解課程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
用於從字元數組、位元組數組以及使用StringBuffer
or獲取字串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 toUpperCase
來toLowerCace
取得大寫和小寫字串。這些方法有一個重載,它接受一個參數Locale
並使用其本地化規則將字串轉換為大寫或小寫。
6. subSequence 方法有什麼作用?
Java 1.4引入了接口CharSequence
,類別繼承這個接口,這是在類別中String
實現方法的唯一原因。它在內部調用. 使用該方法的一個簡單範例: subSequence
String
substring
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]
文章的繼續
GO TO FULL VERSION