Java - ลบอักขระตัวแรกของสตริง


215

ใน Java ฉันมีสตริง:

Jamaica

ฉันต้องการลบอักขระตัวแรกของสตริงและส่งคืน amaica

ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


341

ใช้substring()ฟังก์ชั่นที่มีอาร์กิวเมนต์1เพื่อรับสตริงย่อยจากตำแหน่ง 1 ( หลังจากอักขระตัวแรก) ไปยังจุดสิ้นสุดของสตริง (ปล่อยให้อาร์กิวเมนต์ที่สองเป็นค่าเริ่มต้นตามความยาวเต็มของสตริง)

"Jamaica".substring(1);

21
เป็นสิ่งสำคัญที่จะต้องทราบว่าสิ่งนี้ไม่ได้ลบอักขระออกจากสตริงจริง ๆ- มันให้สตริงใหม่ที่มีอักขระทั้งหมดของสตริงเก่ายกเว้นสตริงแรก ไม่มีวิธีใดที่จะแก้ไขสตริงได้
Chris Dodd

ดูเหมือนว่าลิงก์จะใช้ไม่ได้อีกต่อไป ลองลิงค์ต่อไปนี้แทน: substring (int)
Christian Hoffmann

1
ใช่ถ้าคุณต้องการลบอักขระ n ตัวแรกของตัวแปรสตริงคุณต้องทำสิ่งนี้: variable = variable.substring (n);
Mitulátbáti

67
public String removeFirstChar(String s){
   return s.substring(1);
}

12
removeFirst()หากคุณกำลังจะกำหนดฟังก์ชั่นใหม่อย่างน้อยเลือกชื่อที่เหมาะสมเช่น
moinudin

55

ใช้substring()และกำหนดจำนวนอักขระที่คุณต้องการตัดจากด้านหน้า

String value = "Jamaica";
value = value.substring(1);

คำตอบ: "amaica"


47

ใน Java ให้ลบอักขระนำหน้าถ้าเป็นอักขระบางตัวเท่านั้น

ใช้โอเปอเรเตอร์ 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

Java ลบอินสแตนซ์ทั้งหมดของอักขระที่ใดก็ได้ในสตริง:

String a = "Cool";
a = a.replace("o","");
//variable 'a' contains the string "Cl"

Java ลบอินสแตนซ์แรกของอักขระที่ใดก็ได้ในสตริง:

String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"

4
DRY:header = header.substring(header.startsWith("#") ? 1 : 0);
Aaron Blenkush

3
หรือด้วย regex:header = header.replaceFirst("^#","");
Aaron Blenkush

18

คุณสามารถใช้วิธีการสตริงย่อยของStringคลาสที่ใช้เพียงดัชนีเริ่มต้นและส่งกลับสตริงย่อยที่เริ่มต้นด้วยอักขระที่ดัชนีที่ระบุและขยายไปถึงจุดสิ้นสุดของสตริง

String str = "Jamaica";
str = str.substring(1);


11

สิ่งสำคัญที่ต้องเข้าใจใน Java คือ Strings นั้นไม่เปลี่ยนรูป - คุณไม่สามารถเปลี่ยนแปลงได้ ดังนั้นจึงไม่มีเหตุผลที่จะพูดถึง 'ลบอักขระออกจากสตริง' คุณสร้างสตริงใหม่ด้วยอักขระที่คุณต้องการเท่านั้น โพสต์อื่น ๆ ในคำถามนี้ให้ความหลากหลายของวิธีการทำ แต่สิ่งสำคัญคือต้องเข้าใจว่าสิ่งเหล่านี้จะไม่เปลี่ยนสตริงเดิมในทางใดทางหนึ่ง การอ้างอิงใด ๆ ที่คุณมีต่อสตริงเก่าจะยังคงอ้างอิงไปยังสตริงเก่า (เว้นแต่คุณจะเปลี่ยนแปลงเพื่ออ้างอิงถึงสตริงอื่น) และจะไม่ได้รับผลกระทบจากสตริงที่สร้างขึ้นใหม่

สิ่งนี้มีความเกี่ยวข้องกับประสิทธิภาพเป็นจำนวนมาก ทุกครั้งที่คุณ 'แก้ไข' สตริงคุณกำลังสร้างสตริงใหม่โดยมีค่าใช้จ่ายทั้งหมด (การจัดสรรหน่วยความจำและการรวบรวมขยะ) ดังนั้นหากคุณต้องการแก้ไขชุดของสตริงและสนใจเฉพาะผลลัพธ์สุดท้ายเท่านั้น (สตริงกลางจะตายทันทีที่คุณ 'แก้ไข' พวกเขา) มันอาจจะเหมาะสมกว่าที่จะใช้ StringBuilder หรือ StringBuffer แทน


9

คุณสามารถทำสิ่งนี้:

String str="Jamaica";
str=str.substring(1, title.length());
return str;

หรือโดยทั่วไป:

public String removeFirstChar(String str){
   return str.substring(1, title.length());
}

8

substring ()วิธีการส่งกลับสตริงใหม่ที่มี subsequenceของตัวละครที่มีอยู่ในขณะนี้ในลำดับนี้

ย่อยเริ่มต้นที่กำหนดและขยายไปถึงตัวละครที่startindex end - 1

มันมีสองรูปแบบ ที่แรกก็คือ

  1. String substring(int FirstIndex)

ที่นี่ FirstIndex ระบุดัชนีที่จะเริ่มต้นสตริงย่อย แบบฟอร์มนี้ส่งคืนสำเนาของสตริงย่อยที่เริ่มต้นที่ FirstIndex และวิ่งไปที่จุดสิ้นสุดของสตริงที่เรียกใช้

  1. 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'

4

ฉันเจอสถานการณ์ที่ต้องลบไม่เพียงแค่ตัวละครตัวแรก (ถ้าเป็น#แต่ตัวละครชุดแรก

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และทำงานได้เช่นกัน


1
จะมีปัญหาหาก myString == "#" เนื่องจากสตริงจะอยู่นอกขอบเขตในบางจุด เพื่อป้องกันสิ่งนี้คุณสามารถทำได้ (! myString.isEmpty () && myString.charAt (0))
Christian

2

อีกวิธีหนึ่งคุณสามารถแก้ปัญหาของคุณโดยใช้replaceAllกับตัวอย่าง regex ^.{1}( ตัวอย่าง regex ):

String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica

1

เวอร์ชันของฉันจะลบตัวอักษรนำหนึ่งหรือหลายตัว ตัวอย่างเช่น 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);
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.