คลาสนี้
String
เป็นหนึ่งในคลาสที่ใช้กันอย่างแพร่หลายที่สุดใน Java บทความนี้มีคำถามและคำตอบในการสัมภาษณ์ Java String ที่สำคัญ พวกเขาจะมีประโยชน์มากในการเข้าใจภาพรวมของชั้นเรียนให้ครบถ้วน และจะเตรียมคุณให้พร้อมสำหรับ คำถามสัมภาษณ์ String
ที่เกี่ยวข้องกับชั้นเรียนString
1. String ใน Java คืออะไร? นี่เป็นข้อมูลประเภทใด?
String เป็นคลาสใน Java ที่กำหนดไว้ในแพ็คเกจ java.lang ไม่ใช่ชนิดข้อมูลดั้งเดิมเช่น int และ long คลาส String แสดงถึงชุดอักขระสตริง Strings ถูกใช้ในแอปพลิเคชัน Java เกือบทั้งหมด และมีข้อเท็จจริงบางประการที่เราควรรู้เกี่ยวกับคลาส String เป็นimmutable
ประเภทข้อมูลที่ไม่เปลี่ยนรูป ( ) และสรุปผลใน Java และString
เครื่องเสมือนจะจัดเก็บอ็อบเจ็กต์ทั้งหมดของคลาสไว้ในพูลสตริง คุณลักษณะอีกประการหนึ่งString
คือวิธีการรับออบเจ็กต์คลาสString
โดยใช้เครื่องหมายคำพูดคู่และการโอเวอร์โหลดตัวดำเนินการ "+" สำหรับการต่อข้อมูล
2. การสร้างออบเจ็กต์ String มีวิธีใดบ้าง
เราสามารถสร้างวัตถุโดยใช้ตัวดำเนินการใหม่เช่นเดียวกับคลาสอื่นๆ ใน Java หรือคุณสามารถใช้เครื่องหมายคำพูดคู่เพื่อสร้างString
วัตถุ นอกจากนี้ยังมีตัวสร้างคลาสหลายตัวString
สำหรับรับสตริงจากอาร์เรย์อักขระ อาร์เรย์ไบต์ และยังใช้ StringBuffer
หรือStringBuilder
String str = new String("abc");
String str1 = "abc";
เมื่อเราสร้างสตริงโดยใช้เครื่องหมายคำพูดคู่ Java Virtual Machine จะค้นหาสตริงอื่นที่มีค่าเดียวกันในพูลสตริง หากพบสตริง ระบบจะส่งคืนเฉพาะการอ้างอิงไปยังอ็อบเจ็กต์ที่มีอยู่ของคลาสString
มิฉะนั้น ออบเจ็กต์ใหม่จะถูกสร้างขึ้นด้วยค่าที่ได้รับและจัดเก็บไว้ในพูล เมื่อเราใช้ตัวดำเนินการใหม่ เครื่องเสมือนจะสร้างวัตถุ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)
ก็จะคืนค่าเป็นจริงด้วย compareToIgnoreCase(String str)
: วิธีการนี้คล้ายกับวิธีก่อนหน้ายกเว้นว่าจะละเว้นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ใช้ CASE_INSENSITIVE_ORDER Comparator สำหรับการเปรียบเทียบแบบคำนึงถึงขนาดตัวพิมพ์ หากค่าที่ส่งคืนเป็นศูนย์ วิธีการequalsIgnoreCase(String str)
ก็จะคืนค่าเป็นจริงด้วย ลองดูตัวอย่างเล็กๆ น้อยๆ เพื่ออธิบายวิธีการเหล่านี้:
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. เราสามารถใช้สตริงในโครงสร้างสวิตช์ได้หรือไม่?
คำถามที่ยุ่งยากนี้ใช้เพื่อทดสอบความรู้ของคุณเกี่ยวกับพัฒนาการของภาษาในปัจจุบัน Java 7 ขยายคำสั่ง switchเพื่อใช้สตริง Java เวอร์ชันก่อนหน้าไม่รองรับสิ่งนี้ หากคุณกำลังใช้โฟลว์แบบมีเงื่อนไขสำหรับสตริง คุณสามารถใช้เงื่อนไข if-else และคุณสามารถใช้คำสั่ง switch หากคุณใช้ Java 7 หรือใหม่กว่า ตัวอย่างเล็กๆ ของการใช้สตริงในคำสั่ง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)
จุดการใช้งานคีย์switch
สำหรับสตริงใน Java
- การใช้สตริงในการออกแบบ
switch
ทำให้โค้ดสามารถอ่านได้ง่ายขึ้นโดยกำจัดเงื่อนไขหลายif-else
ลูกโซ่ - สตริงใน
switch
จะต้องตรงตามตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ตัวอย่างด้านบนแสดงสิ่งนี้ - ตัวดำเนินการ
switch
ใช้วิธีString.equals()
การเปรียบเทียบค่าผลลัพธ์กับ ค่า ตัวพิมพ์ดังนั้นให้เพิ่มการตรวจสอบเป็น 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