ใน Java ฉันมีสตริง:
Jamaica
ฉันต้องการลบอักขระตัวแรกของสตริงและส่งคืน amaica
ฉันจะทำสิ่งนี้ได้อย่างไร
ใน Java ฉันมีสตริง:
Jamaica
ฉันต้องการลบอักขระตัวแรกของสตริงและส่งคืน amaica
ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
ใช้substring()
ฟังก์ชั่นที่มีอาร์กิวเมนต์1
เพื่อรับสตริงย่อยจากตำแหน่ง 1 ( หลังจากอักขระตัวแรก) ไปยังจุดสิ้นสุดของสตริง (ปล่อยให้อาร์กิวเมนต์ที่สองเป็นค่าเริ่มต้นตามความยาวเต็มของสตริง)
"Jamaica".substring(1);
public String removeFirstChar(String s){
return s.substring(1);
}
removeFirst()
หากคุณกำลังจะกำหนดฟังก์ชั่นใหม่อย่างน้อยเลือกชื่อที่เหมาะสมเช่น
ใช้substring()
และกำหนดจำนวนอักขระที่คุณต้องการตัดจากด้านหน้า
String value = "Jamaica";
value = value.substring(1);
คำตอบ: "amaica"
ใช้โอเปอเรเตอร์ Java เพื่อตรวจสอบอย่างรวดเร็วว่าตัวละครของคุณอยู่ที่นั่นหรือไม่ สิ่งนี้จะตัดอักขระนำหน้าถ้ามีอยู่หากผ่านสตริงว่างให้ส่งคืนสตริงว่าง
String header = "";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);
header = "foobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);
header = "#moobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);
พิมพ์:
blankstring
foobar
moobar
String a = "Cool";
a = a.replace("o","");
//variable 'a' contains the string "Cl"
String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"
header = header.substring(header.startsWith("#") ? 1 : 0);
header = header.replaceFirst("^#","");
คุณสามารถใช้วิธีการสตริงย่อยของString
คลาสที่ใช้เพียงดัชนีเริ่มต้นและส่งกลับสตริงย่อยที่เริ่มต้นด้วยอักขระที่ดัชนีที่ระบุและขยายไปถึงจุดสิ้นสุดของสตริง
String str = "Jamaica";
str = str.substring(1);
public String removeFirst(String input)
{
return input.substring(1);
}
สิ่งสำคัญที่ต้องเข้าใจใน Java คือ Strings นั้นไม่เปลี่ยนรูป - คุณไม่สามารถเปลี่ยนแปลงได้ ดังนั้นจึงไม่มีเหตุผลที่จะพูดถึง 'ลบอักขระออกจากสตริง' คุณสร้างสตริงใหม่ด้วยอักขระที่คุณต้องการเท่านั้น โพสต์อื่น ๆ ในคำถามนี้ให้ความหลากหลายของวิธีการทำ แต่สิ่งสำคัญคือต้องเข้าใจว่าสิ่งเหล่านี้จะไม่เปลี่ยนสตริงเดิมในทางใดทางหนึ่ง การอ้างอิงใด ๆ ที่คุณมีต่อสตริงเก่าจะยังคงอ้างอิงไปยังสตริงเก่า (เว้นแต่คุณจะเปลี่ยนแปลงเพื่ออ้างอิงถึงสตริงอื่น) และจะไม่ได้รับผลกระทบจากสตริงที่สร้างขึ้นใหม่
สิ่งนี้มีความเกี่ยวข้องกับประสิทธิภาพเป็นจำนวนมาก ทุกครั้งที่คุณ 'แก้ไข' สตริงคุณกำลังสร้างสตริงใหม่โดยมีค่าใช้จ่ายทั้งหมด (การจัดสรรหน่วยความจำและการรวบรวมขยะ) ดังนั้นหากคุณต้องการแก้ไขชุดของสตริงและสนใจเฉพาะผลลัพธ์สุดท้ายเท่านั้น (สตริงกลางจะตายทันทีที่คุณ 'แก้ไข' พวกเขา) มันอาจจะเหมาะสมกว่าที่จะใช้ StringBuilder หรือ StringBuffer แทน
คุณสามารถทำสิ่งนี้:
String str="Jamaica";
str=str.substring(1, title.length());
return str;
public String removeFirstChar(String str){
return str.substring(1, title.length());
}
substring ()วิธีการส่งกลับสตริงใหม่ที่มี subsequenceของตัวละครที่มีอยู่ในขณะนี้ในลำดับนี้
ย่อยเริ่มต้นที่กำหนดและขยายไปถึงตัวละครที่start
index end - 1
มันมีสองรูปแบบ ที่แรกก็คือ
String substring(int FirstIndex)
ที่นี่ FirstIndex ระบุดัชนีที่จะเริ่มต้นสตริงย่อย แบบฟอร์มนี้ส่งคืนสำเนาของสตริงย่อยที่เริ่มต้นที่ FirstIndex และวิ่งไปที่จุดสิ้นสุดของสตริงที่เรียกใช้
String substring(int FirstIndex, int endIndex)
ที่นี่ FirstIndex ระบุดัชนีเริ่มต้นและ endIndex ระบุจุดหยุด สตริงที่ส่งคืนมีอักขระทั้งหมดจากดัชนีเริ่มต้นจนถึง แต่ไม่รวมถึงดัชนีสิ้นสุด
String str="Amiyo";
// prints substring from index 3
System.out.println("substring is = " + str.substring(3)); // Output "yo'
ฉันเจอสถานการณ์ที่ต้องลบไม่เพียงแค่ตัวละครตัวแรก (ถ้าเป็น#
แต่ตัวละครชุดแรก
String myString = ###Hello World
อาจจะเป็นจุดเริ่มต้น Hello World
แต่ฉันเพียงต้องการที่จะให้ สิ่งนี้สามารถทำได้ดังนี้
while (myString.charAt(0) == '#') { // Remove all the # chars in front of the real string
myString = myString.substring(1, myString.length());
}
สำหรับกรณีของ OP ให้แทนที่while
ด้วยif
และทำงานได้เช่นกัน
อีกวิธีหนึ่งคุณสามารถแก้ปัญหาของคุณโดยใช้replaceAll
กับตัวอย่าง regex ^.{1}
( ตัวอย่าง regex ):
String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica
เวอร์ชันของฉันจะลบตัวอักษรนำหนึ่งหรือหลายตัว ตัวอย่างเช่น String str1 = "01234" เมื่อลบส่วนนำ '0' ผลลัพธ์จะเป็น "1234" สำหรับ String str2 = "000123" ผลลัพธ์จะเป็น "123" อีกครั้ง และสำหรับ String str3 = "000" ผลลัพธ์จะเป็นสตริงว่าง: "" ฟังก์ชั่นดังกล่าวมักจะมีประโยชน์เมื่อทำการแปลงสตริงตัวเลขให้เป็นตัวเลขข้อดีของการแก้ปัญหานี้เมื่อเทียบกับ regex (replaceAll (... )) คือว่าอันนี้เร็วกว่ามาก สิ่งนี้มีความสำคัญเมื่อทำการประมวลผล Strings จำนวนมาก
public static String removeLeadingChar(String str, char ch) {
int idx = 0;
while ((idx < str.length()) && (str.charAt(idx) == ch))
idx++;
return str.substring(idx);
}