- วิธีการ
- การสร้างสตริงแบบสุ่ม
- การเปรียบเทียบสตริง:
equals()
หรือ==
?
โปรแกรมเมอร์มักใช้ คลาสนี้
String
บ่อยมาก ดังนั้นจึงควรเรียนรู้เป็นอย่างดี
![สตริงคลาส - 1]()
โปรดจำไว้ว่าวัตถุคลาส
String
ไม่เปลี่ยนรูป ดังนั้นเมื่อคุณคิดว่าคุณกำลังเปลี่ยนสตริง แสดงว่าคุณกำลังสร้างสตริงใหม่จริงๆ Java มีคลาสพิเศษ
StringBuffer
และ
StringBuilder
อนุญาตให้เปลี่ยนแปลงสตริงได้ คลาส
String
,
StringBuffer
,
StringBuilder
ถูกกำหนดไว้ใน แพ็คเกจ
java.langและพร้อมใช้งานโดยอัตโนมัติโดยไม่ต้องมีการประกาศการนำเข้า ทั้งสามคลาสใช้อินเทอร์เฟ
CharSequence
ซ การสร้างสตริงนั้นง่ายมาก ตัวอย่างเช่น คุณสามารถทำได้:
String aboutCat = "Кот - это звучит гордо, а если наступить на хвост, то громко";
คุณสามารถสร้างอาร์เรย์ของสตริงได้:
String[] cats = {"Васька", "Barsik", "Murzik"};
คุณสามารถสร้างวัตถุคลาสว่าง
String
:
String str = new String();
คุณสามารถสร้างสตริงผ่านอาร์เรย์อักขระ:
char[] chars = { 'c', 'a', 't' };
String str = new String(chars);
นอกจากนี้ยังมี Constructor ที่ให้คุณตั้งค่าช่วงของอาร์เรย์อักขระได้ คุณต้องระบุจุดเริ่มต้นของช่วงและจำนวนอักขระที่จะใช้:
char[] chars = {'c', 'a', 't', 'a', 'm', 'a', 'r', 'a', 'n' };
String str = new String(chars, 0, 3);
คุณสามารถสร้างคลาสอ็อบเจ็กต์
String
จากคลาสอ็อบเจ็กต์ได้
StringBuffer
โดยใช้
StringBuilder
Constructor ต่อไปนี้:
String(StringBuffer an object_StrBuf)
String(StringBuilder an object_StrBuild)
ตัวดำเนินการ+
และ += สำหรับString
ใน Java เครื่องหมายบวก (
+
) หมายถึงการต่อสตริง หรืออีกนัยหนึ่งคือการรวมสตริง
String cat = "Кот";
String name = "Васька";
String fullname = cat + " " + name;
หากหนึ่งในตัวถูกดำเนินการในนิพจน์มีสตริง ตัวถูกดำเนินการอื่นๆ จะต้องเป็นสตริงด้วย ดังนั้น Java เองจึงสามารถส่งตัวแปรไปยังการแสดงสตริงได้ แม้ว่าจะไม่ใช่สตริงก็ตาม
int digit = 4;
String paws = " лапы";
String aboutcat = digit + paws;
За кулисами Java за нас преобразовало число 4 в строку "4"
การจัดรูปแบบสตริง
สมมติว่าเรามีทรัพยากรสตริง:
<string name="aboutcat">У кота по имени Барсик четыре лапы, один хвост. Ему 5 лет</string>
หากต้องการแสดงสตริงนี้โดยทางโปรแกรมในองค์ประกอบ
TextView
คุณสามารถใช้โค้ด:
TextView tvCatsInfo = (TextView)findViewById(R.id.textView1);
tvCatsInfo.setText(R.string.aboutcat);
ลองจินตนาการว่าคุณมีแมวหลายตัว แน่นอนว่าคุณสามารถมีสายพันธุ์ของตัวเองสำหรับแมวแต่ละตัวได้ แต่เส้นคล้ายกันมากเปลี่ยนแค่ชื่อและอายุเท่านั้น คุณยังสามารถเปลี่ยนจำนวนอุ้งเท้าและก้อยได้ (คุณสูบบุหรี่อะไร) ในกรณีดังกล่าว คุณสามารถใช้การจัดรูปแบบสตริงได้ เราจำเป็นต้องกำหนดคำที่เราจะเปลี่ยนและแทนที่ด้วยชุดอักขระพิเศษที่ขึ้นต้นด้วยสัญลักษณ์เปอร์เซ็นต์ จากนั้นเพิ่มจำนวนทีละหนึ่ง จากนั้น
$s
สำหรับสตริงหรือ
$d
ตัวเลข ดังนั้นเรามาเปลี่ยนทรัพยากรสตริงของเราดังนี้:
<string name="aboutcat">У кота по имени %1$s %2$s лапы, %3$s хвост. Ему %4$d лет</string>
มาทำการเปลี่ยนแปลงโค้ดกัน:
String strBarsik = "Barsik";
String strPaws = "четыре";
String strTail = "one";
int year = 5;
String strCats = getResources().getString(R.string.aboutcat);
String strFinal = String.format(strCats, strBarsik, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
หากคุณมีแมว Vaska และเขาอายุหกขวบ ให้เพิ่มตัวแปรสองตัวและจัดรูปแบบเส้น
String strVaska = "Васька";
year = 6;
String strFinal = String.format(strCats, strVaska, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
ต่อไปนี้คือตัวอย่างการจัดรูปแบบง่ายๆ จดจำมันและใช้มันในสถานที่ที่เหมาะสม
ทรัพยากรสตริง
ขอแนะนำให้เก็บสตริงไว้ในทรัพยากร การเข้าถึงทรัพยากรสตริงโดยทางโปรแกรมทำได้ดังนี้:
String catName = getResources().getString(R.string.barsik);
แยกสตริงออกจากอาร์เรย์สตริงในทรัพยากร
สมมติว่าคุณมีอาร์เรย์สตริงที่กำหนดไว้ใน ไฟล์
strings.xmlชื่อ
cats_array
. จากนั้นคุณสามารถเข้าถึงแถวจากแหล่งข้อมูลดังนี้:
Resources res = getResources();
String[] cats = res.getStringArray(R.array.cats_array);
วิธีการ
public char charAt (int index)
ส่งกลับอักขระที่ออฟเซ็ตที่ระบุในสตริงนี้ การนับถอยหลังเริ่มต้นจาก 0 ไม่จำเป็นต้องใช้ค่าลบและไม่มีอยู่จริง ขอให้จริงจังกว่านี้ หากต้องการแยกอักขระหลายตัวให้ใช้
getChars()
.
String testString = "Котёнок";
char myChar = testString.charAt(2);
tv.setText(Character.toString(myChar));
public int codePointAt(int index)
ส่งกลับอักขระ Unicode ที่ดัชนีที่กำหนด
String testString = "Котёнок";
int myChar = testString.codePointAt(3);
tv.setText(String.valueOf(myChar));
public int codePointBefore(int index)
ส่งกลับอักขระ Unicode ที่นำหน้าดัชนีที่กำหนด
String testString = "Котёнок";
int myChar = testString.codePointBefore(4);
tv.setText(String.valueOf(myChar));
public int codePointCount(int start, int end)
คำนวณจำนวนอักขระ Unicode ระหว่างตำแหน่ง
start
และ
end
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar));
public int compareTo(String string)
เปรียบเทียบสตริงที่ระบุโดยใช้ค่าอักขระ Unicode และคำนวณว่าสตริงใดมีค่าน้อยกว่า เท่ากับ หรือมากกว่าถัดไป สามารถใช้สำหรับการเรียงลำดับ กรณีจะถูกนำมาพิจารณา หากสตริงตรงกัน ระบบจะส่งคืนค่า 0 หากน้อยกว่าศูนย์ แสดงว่าสตริงที่เรียกมีค่าน้อยกว่า string
string
หากมากกว่าศูนย์ แสดงว่าสตริงที่เรียกมีค่ามากกว่า
string
string คำตัวพิมพ์ใหญ่จะอยู่เหนือคำตัวพิมพ์เล็ก
String testString = "Котёнок";
if (testString.compareTo("котёнок") == 0) {
tvInfo.setText("Строки равны");
} else {
tvInfo.setText("Строки не равны. Возвращено"
+ testString.compareTo("котёнок"));
}
ลองเรียงลำดับอาร์เรย์ของสตริงโดยใช้การเรียงลำดับแบบฟอง
String[] poem = { "Мы", "везём", "с", "собой", "кота" };
for (int j = 0; j < poem.length; j++) {
for (int i = j + 1; i < poem.length; i++) {
if (poem[i].compareTo(poem[j]) < 0) {
String temp = poem[j];
poem[j] = poem[i];
poem[i] = temp;
}
}
System.out.println(poem[j]);
}
เป็นผลให้เราได้รับ:
Мы
везём
кота
с
собой
อย่างที่คุณเห็น
การเปลี่ยนตำแหน่งของข้อกำหนดไม่ได้เปลี่ยนผลรวมการเรียงลำดับของแมว
public int compareToIgnoreCase (String string)
เปรียบเทียบสตริงที่ระบุโดยใช้ค่าอักขระ Unicode โดยไม่คำนึงถึงตัวพิมพ์
String testString = "Котёнок";
if (testString.compareToIgnoreCase("котёнок") == 0) {
tv.setText("Строки равны");
} else {
tv.setText("Строки не равны. Возвращено"
+ testString.compareTo("котёнок"));
}
public String concat (String string)
เชื่อมต่อสตริงกับสตริงที่ระบุ สตริงใหม่จะถูกส่งกลับโดยมีการต่อข้อมูลของทั้งสองสตริงเข้าด้วยกัน โปรดทราบว่าชื่อวิธีการนั้นมี cat!
String testString = "Сук";
String newString = testString.concat("кот");
tv.setText(newString);
เมธอดนี้ทำหน้าที่เหมือนกับตัวดำเนินการ
+
และสามารถเขียน
Сук + кот
ได้ แต่คนเลี้ยงแมวจริงๆ จะใช้วิธี "แมว"
public boolean contains (CharSequence cs)
กำหนดว่าสตริงมีลำดับของอักขระหรือไม่
CharSequence
String testString = "котёнок";
if(testString.contains("кот")){
infoTextView.setText("В слове котёнок содержится слово кот!");
}
public static String copyValueOf (char[] data, int start, int length)
สร้างสตริงใหม่ที่มีอักขระที่ระบุจากอาร์เรย์
Data
เริ่มต้นที่ตำแหน่ง
start
(การกำหนดหมายเลขเป็นศูนย์) ของความยาว
length public static String copyValueOf(char[] data)
สร้างสตริงใหม่ที่มีอักขระจากอาร์เรย์ที่ระบุ การเปลี่ยนอาร์เรย์หลังจากสร้างแถวแล้วจะไม่เปลี่ยนแถวที่สร้างขึ้น
public boolean endsWith(String suffix)
ตรวจสอบว่าสตริงลงท้ายด้วย
suffix
.
String str1 = "Суккот";
if(str1.endsWith("кот"))
infoTextView.setText("Слово заканчивается на котике");
else
infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean equals (Object string)
เปรียบเทียบวัตถุที่ระบุและสตริง และส่งคืน
ค่าจริงหากสตริงที่เปรียบเทียบเท่ากัน เช่น มีอักขระเหมือนกันและอยู่ในลำดับที่คำนึงถึงตัวพิมพ์เล็กและใหญ่เหมือนกัน
String str1 = "Кот";
String str2 = "Кошка";
if(str1.equals(str2))
infoTextView.setText("Строки совпадают");
else
infoTextView.setText("Строки не совпадают");
อย่าสับสนวิธีการนี้กับตัวดำเนินการ
==
ซึ่งจะเปรียบเทียบการอ้างอิงออบเจ็กต์สองรายการและพิจารณาว่าอ้างอิงถึงอินสแตนซ์เดียวกันหรือไม่ ดูการเปรียบเทียบสตริง:
equals()
หรือ
==
?
public boolean equalsIgnoreCase(String string)
เปรียบเทียบสตริงที่ระบุกับสตริงต้นทางในลักษณะที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ และส่งคืน
ค่าจริงหากเท่ากัน ช่วง AZ ถือว่าเท่ากับช่วง az
String str1 = "Кот";
String str2 = "кот";
if(str1.equalsIgnoreCase(str2))
infoTextView.setText("Строки совпадают");
else
infoTextView.setText("Строки не совпадают");
public static String format(Locale locale, String format, Object... args)
ส่งคืนสตริงที่จัดรูปแบบโดยใช้รูปแบบที่ให้มาและอาร์กิวเมนต์ที่แปลเป็นภาษาท้องถิ่นในขอบเขตที่กำหนด เช่น วันที่หรือเวลา
String.format("%.2f", floatValue);
เราติดคำสองคำที่ปรากฏในบรรทัดใหม่ ในกรณีนี้ คำที่สองจะแสดงเป็นตัวพิมพ์ใหญ่
String str1 = "Кот";
String str2 = "васька";
String strResult = String.format("%s\n%S", str1, str2);
infoTextView.setText(strResult);
แปลงตัวเลขเป็นระบบฐานแปด
String str1 = "8";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Восьмеричное meaning): %o\n", inInt);
infoTextView.setText(strResult);
โดยการเปรียบเทียบ แสดงในระบบเลขฐานสิบหก
String str1 = "255";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Шестнадцатеричное meaning): %x\n", inInt);
infoTextView.setText(strResult);
สำหรับการใช้งานตัวพิมพ์ใหญ่
%X
ก็
ff
จะ
FF
เป็น
%d
สำหรับการ ใช้งานระบบทศนิยม นอกจากนี้ยังสามารถแสดงวันที่ได้หลายวิธี
Date now = new Date();
Locale locale = Locale.getDefault();
infoTextView.setText(
String.format(locale, "%tD\n", now) +
String.format(locale, "%tF\n", now) +
String.format(locale, "%tr\n", now) +
String.format(locale, "%tz\n", now) +
String.format(locale, "%tZ\n", now));
public byte[] getBytes(String charsetName)
ส่งกลับสตริงที่จัดรูปแบบโดยใช้รูปแบบที่ให้มา
public void getBytes(int start, int end, byte[] data, int index)
และการโอเวอร์โหลดอื่น ๆ วิธีการจัดเก็บอักขระลงในอาร์เรย์ไบต์ซึ่งเป็นทางเลือกแทน
getChars()
. มักใช้เมื่อส่งออกสตริงจากแหล่งต่างๆ ที่ใช้อักขระ Unicode อื่น ตัวอย่างเช่น Java โดยค่าเริ่มต้นใช้งานได้กับอักขระ Unicode 16 บิต และบนอินเทอร์เน็ต สตริงมักใช้ Unicode 8 บิต, ASCII เป็นต้น
public void getChars(int start, int end, char[] buffer, int index)
วิธีการแยกอักขระหลายตัวจากสตริง คุณต้องระบุดัชนีของจุดเริ่มต้นของสตริงย่อย (
start
) ดัชนีของอักขระที่อยู่หลังจุดสิ้นสุดของสตริงย่อยที่จะแยก ( end ) อาร์เรย์ที่ได้รับอักขระที่เลือกจะอยู่ในพารามิเตอร์
บัฟเฟอร์ ดัชนีในอาร์เรย์ซึ่งเริ่มต้นจากการเขียนสตริงย่อยจะถูกส่งผ่านในพารามิเตอร์
ดัชนี ตรวจสอบให้แน่ใจว่าอาร์เรย์มีขนาดใหญ่พอที่จะมีอักขระทั้งหมดในสตริงย่อยที่ระบุ
String unusualCat = "Котёнок по имени Гав";
int start = 5;
int end = 12;
char[] buf = new char[end - start];
unusualCat.getChars(start, end, buf, 0);
infoTextView.setText(new String(buf));
public int hashCode()
ส่งกลับจำนวนเต็มที่เป็นรหัสแฮชสำหรับวัตถุนี้
public int indexOf(int c)
ส่งกลับจำนวนตำแหน่งแรกที่พบด้วยดัชนีที่ระบุ c
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start)
ค้นหาดัชนีจากเริ่มต้นที่ตำแหน่ง
start
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё", 4)));
public int indexOf (String string)
ค้นหาชุดอักขระ
subString
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка")));
public int indexOf (String subString, int start)
ค้นหาสตริงอักขระ
subString
เริ่มต้นที่ตำแหน่ง
start
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка", 2)));
public String intern ()
"แฮช" สตริง
public boolean isEmpty ()
ตรวจสอบว่าสตริงว่างเปล่าหรือไม่
if(catname.isEmpty()) {
}
วิธีการนี้ปรากฏใน API 9 (Android 2.1) สำหรับอุปกรณ์รุ่นเก่า ให้ใช้
String.length() == 0
public int lastIndexOf (String string) и другие перегруженные версии
ส่งคืนหมายเลขตำแหน่งล่าสุดที่พบที่ดัชนีที่ระบุ ตัวอย่างเช่น คุณสามารถรับชื่อไฟล์ที่ไม่มีนามสกุลดังนี้:
filename.toString().substring(0, filename.getString().lastIndexOf("."));
ในตัวอย่างนี้ เราได้ตำแหน่งของจุดสุดท้ายและรับสตริงย่อยก่อนหน้านั้น
public int length()
ส่งกลับความยาวของสตริง
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.length()));
public boolean matches(String regularExpression)
ตรวจสอบว่าสตริงตรงกับนิพจน์ทั่วไปหรือไม่
public int offsetByCodePoints (int index, int codePointOffset)
ส่งกลับตำแหน่งที่อยู่ห่าง
codePointOffset
จากตำแหน่งเริ่มต้นที่ระบุโดยพารามิเตอร์
index
public boolean regionMatches (int thisStart, String string, int start, int length)
วิธีการเปรียบเทียบส่วนที่ระบุของสตริงกับส่วนอื่นของสตริง
String
คุณต้อง ระบุดัชนีของจุดเริ่มต้นของช่วงแถวของวัตถุการเรียกของชั้นเรียน สตริงที่จะเปรียบเทียบจะถูกส่งผ่านใน
string
พารามิเตอร์ ดัชนีของอักขระเริ่มต้นที่ต้องทำการเปรียบเทียบจะถูกส่งผ่านในพารามิเตอร์
start
และความยาวของสตริงย่อยที่จะเปรียบเทียบจะถูกส่งผ่านใน
length
พารามิเตอร์
public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length)
เวอร์ชันโอเวอร์โหลด วิธีการเปรียบเทียบส่วนที่ระบุของสตริงกับส่วนอื่นของสตริง โดยไม่สนใจตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
public String replace(CharSequence target, CharSequence replacement) и другие перегруженные версии
เปลี่ยนอักขระหรือลำดับของอักขระ
target
เป็น
replacement
String testString = "whale";
infoTextView.setText(testString.replace("And", "о"));
public String replaceAll (String regularExpression, String replacement)
public String replaceFirst (String regularExpression, String replacement)
ลบอักขระตัวแรกโดยใช้นิพจน์ทั่วไป ตัวอย่างเช่น หากคุณต้องการลบศูนย์ที่จุดเริ่มต้นของตัวเลข 001, 007, 000024 คุณสามารถใช้การโทรนี้ได้
String s = "001234-cat";
String s = s.replaceFirst ("^0*", "");
public String[] split (String regularExpression) и другие перегруженные версии
แยกสตริงออกเป็นอาร์เรย์ของคำ ตัวอย่างเช่น มีสตริง Vaska Ryzhik Murzik Barsik และเราต้องการได้รับอาร์เรย์ของชื่อแมว:
String catnames = "Васька Рыжик Мурзик Барсик";
String aCats[] = catnames.split(" ");
เราได้รับ:
aCats[0] = Васька
aCats[1] = Рыжик
aCats[2] = Мурзик
aCats[3] = Барсик
public boolean startsWith(String prefix)
ตรวจสอบว่าสตริงขึ้นต้นด้วยอักขระ
prefix
จากจุดเริ่มต้นของสตริงหรือไม่
String str1 = "котлета";
if(str1.startsWith("кот"))
infoTextView.setText("Слово содержит кота");
else
infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean startsWith(String prefix, int start)
ตรวจสอบว่าสตริงที่กำหนดขึ้นต้นด้วยอักขระ
prefix
ในตำแหน่งที่ระบุหรือไม่
String str1 = "Суккот";
if(str1.startsWith("кот", 3))
infoTextView.setText("Слово содержит кота");
else
infoTextView.setText("Плохое слово. Нет смысла его использовать");
public CharSequence subSequence (int start, int end)
คล้ายกับวิธีการ
substring()
แต่สามารถใช้ได้สำหรับ
CharSequence
.
public String substring(int start)
และการโอเวอร์โหลดอื่น ๆ สร้างลำดับ / สตริงใหม่ด้วยอักขระจากสตริงที่กำหนดโดยเริ่มต้นที่ตำแหน่ง
start
ถึงจุดสิ้นสุดของบรรทัด / ลงท้ายด้วยอักขระที่
end
ตำแหน่ง บรรทัดใหม่มีอักขระตั้งแต่
start
ต้นจนจบ - 1 ดังนั้นเราจึงรับอักขระเพิ่มอีกหนึ่งตัว
String testString = "скотина";
infoTextView.setText(testString.substring(1, 4));
public char[] toCharArray()
คัดลอกอักขระในสตริงนี้ไปยังอาร์เรย์อักขระ ผลลัพธ์เดียวกันสามารถรับได้ผ่านทาง
getChars()
. เอกสารไม่แนะนำให้ใช้วิธีนี้ โดยแนะนำ
charAt()
.
String unusualCat = "Котёнок по имени Гав";
char[] yomoe = unusualCat.toCharArray();
infoTextView.setText(String.valueOf(yomoe[3]));
public String toLowerCase() и другие перегруженные версии
แปลงสตริงเป็นตัวพิมพ์เล็ก ภาษาเริ่มต้นจะควบคุมการแปลง แมวสตริง = "แมว"; สตริงล่าง = cat.toLowerCase(); infoTextView.setText (ล่าง);
public String toString ()
ส่งกลับสตริง สำหรับตัวสตริงเอง ซึ่งตัวมันเองก็เป็นสตริงอยู่แล้ว การส่งคืนสตริงนั้นไม่มีจุดหมาย (โอ้ ฉันจะงอมันได้ยังไง) แต่วิธีนี้มีประโยชน์มากสำหรับคลาสอื่นจริงๆ
public String toUpperCase()
แปลงสตริงเป็นตัวพิมพ์ใหญ่ ภาษาเริ่มต้นจะควบคุมการแปลง
String cat = "Кот";
String upper = cat.toUpperCase();
infoTextView.setText(upper);
public String trim()
ลบช่องว่างที่จุดเริ่มต้นและจุดสิ้นสุดของสตริง
String str = " Hello Kitty ".trim();
infoTextView.setText(str);
public static String valueOf(long value)
และการโอเวอร์โหลดอื่นๆ แปลงเนื้อหา (ตัวเลข วัตถุ อักขระ อาร์เรย์อักขระ) เป็นสตริง
int catAge = 7;
infoTextView.setText(String.valueOf(catAge));
การสร้างสตริงแบบสุ่ม
สมมติว่าเราต้องการสตริงสุ่มของอักขระที่กำหนด
private static final String mCHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
private static final int STR_LENGTH = 9;
Random random = new Random();
public void onClick(View view) {
TextView infoTextView = (TextView) findViewById(R.id.textViewInfo);
infoTextView.setText(createRandomString());
}
public String createRandomString() {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < STR_LENGTH; i++) {
int number = random.nextInt(mCHAR.length());
char ch = mCHAR.charAt(number);
builder.append(ch);
}
return builder.toString();
}
การเปรียบเทียบสตริง: equals()
หรือ==
?
ลองดูตัวอย่าง
String str1 = "Murzik";
String str2 = new String(str1);
boolean isCat = str1 == str2;
infoTextView.setText(str1 + " == " + str2 + " -> " + isCat);
แม้ว่าตัวแปรทั้งสองจะมีคำเดียวกัน แต่เรากำลังจัดการกับอ็อบเจ็กต์ที่แตกต่างกันสองรายการ และโอเปอเรเตอร์จะ
==
ส่งกลับ
false ครั้งหนึ่ง เมื่อต้นไม้มีขนาดใหญ่ ฉันจำเป็นต้องเปรียบเทียบสองสายจากแหล่งที่ต่างกัน แม้ว่าสตริงจะดูเหมือนกันทุกประการ แต่การเปรียบเทียบโดยใช้ตัวดำเนินการ
==
กลับ
เป็นเท็จและทำให้การ์ดทั้งหมดสับสนสำหรับฉัน แล้วฉันก็พบว่าฉันจำเป็นต้องใช้
equals()
. สตริงใน Java เป็นวัตถุแยกต่างหากที่อาจไม่เหมือนกับวัตถุอื่น แม้ว่าผลลัพธ์ของสตริงอาจดูเหมือนกันบนหน้าจอก็ตาม เป็นเพียงว่า Java ในกรณีของตัวดำเนินการเชิงตรรกะ
==
(เช่นเดียวกับ
!=
) เปรียบเทียบการอ้างอิงไปยังวัตถุ (ไม่มีปัญหาดังกล่าวเมื่อทำงานกับพื้นฐาน):
String s1 = "hello";
String s2 = "hello";
String s3 = s1;
String s4 = "h" + "e" + "l" + "l" + "o";
String s5 = new String("hello");
String s6 = new String(new char[]{'h', 'e', 'l', 'l', 'o'});
infoTextView.setText(s1 + " == " + s2 + ": " + (s1 == s2));
GO TO FULL VERSION