วิธีรับอักขระตัวสุดท้ายของสตริง


526

วิธีรับอักขระตัวสุดท้ายของสตริง:

"linto.yahoo.com."

อักขระตัวสุดท้ายของสตริงนี้คือ "."

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


คุณยอมรับคำตอบนี้ได้หรือไม่เพราะเป็นคำตอบที่ดีที่สุดและควรแสดงผลก่อน
Sharku

คำตอบ:


995

ทางเลือกที่หรูหราและสั้นเป็นString.prototype.sliceวิธีการ

เพียงแค่โดย:

str.slice(-1);

ดัชนีเริ่มต้นเชิงลบแบ่งสตริงจากlength+indexถึงlengthเป็นดัชนี-1แยกอักขระสุดท้าย:

"abc".slice(-1); // "c";

9
หมายเหตุด้านข้าง: อาร์เรย์มีslice()วิธีการเช่นกัน - ฟังก์ชั่นการใช้งานของพวกเขาคล้ายกับแนวคิด (สำเนาบางส่วน) -------- (ในกรณีที่คุณกำลังอ่านโค้ดและดู.slice())
Peter Ajtai

1
คุณหมายถึงอะไรโดย "สตริง UTF-8"? วลีไม่สมเหตุสมผล อย่างไรก็ตาม FWIW สตริง JavaScript เป็นสัตว์ตลกตัวเอง: เป็นลำดับของค่าจำนวนเต็ม 16 บิตที่ไม่ได้ลงนาม หากเจตนาของสตริงของคุณคือการจัดเก็บอักขระรหัสด้านบนจะคืนค่า 16 บิตสุดท้ายซึ่งจะไม่สวยถ้าเป็นส่วนที่สองของคู่ตัวแทน แต่อีกครั้งคุณหมายถึงอะไรโดย "สตริง UTF-8"? UTF-8 เป็นรูปแบบการเข้ารหัสที่อาจสมเหตุสมผลถ้าคุณมีอาร์เรย์ไบต์ แต่ไม่มีความหมายอะไรเลยเมื่อพูดถึงสตริง แค่สงสัย.
Ray Toal

4
ลงคะแนนเนื่องจากไม่ตอบคำถาม มันถือว่าผู้ใช้ต้องการเพียงแค่ลบตัวละคร แต่ถ้าคุณต้องการจับตัวละครตัวสุดท้ายและตอบสนองตามสิ่งที่มันเป็น คำตอบ str.charAt () เป็นคำตอบที่ถูกต้อง
gregtczap

6
@Egg, ดูเหมือนว่าคุณไม่ได้พยายามที่ตัวอย่างของฉันstr.slice(-1)ไม่แน่นอนได้รับตัวอักษรตัวสุดท้ายของสตริง (เป็น OP ที่จำเป็น) เช่นเดียวกับถ้าคุณใช้ลอง:str.charAt(str.length - 1) "abc".slice(-1)ฉันแสดงการใช้String.prototype.sliceดัชนีที่เป็นลบที่นี่ str.slice(-n)จะได้รับnอักขระตัวสุดท้ายของสตริงต้นฉบับเป็นค่าสตริงใหม่ ข้อมูลเพิ่มเติม: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
......

9
@CMS คุณถูกต้องวิธีการของคุณจะดึงดูดอักขระตัวสุดท้ายของสตริงโดยไม่ต้องตัดแต่ง วิธีการที่ดีสง่างามเช่นกัน ด้วยเหตุผลบางอย่างฉันคิดว่ามันจะตัดแต่งตัวอักษรเหล่านั้นและส่งคืนสตริงที่ถูกตัด ขอโทษด้วยที่ฉันรู้สึกเหมือนคนงี่เง่าที่ไม่ได้ลองก่อน
gregtczap

97

การใช้charAt:

charAt () วิธีการส่งกลับตัวละครที่ดัชนีที่ระบุในสตริง

คุณสามารถใช้วิธีนี้ร่วมกับlengthคุณสมบัติของสตริงเพื่อรับอักขระตัวสุดท้ายในสตริงนั้น
ตัวอย่างเช่น:

const myString = "linto.yahoo.com.";
const stringLength = myString.length; // this will be 16
console.log('lastChar: ', myString.charAt(stringLength - 1)); // this will be the string


64
str.charAt(str.length - 1)

เบราว์เซอร์บางตัวอนุญาตให้คุณ (ย่อส่วนที่ไม่เป็นมาตรฐาน) ให้ย่อขนาดนี้เป็น:

str[str.length - 1];

50

คุณสามารถทำได้โดยใช้วิธีการต่าง ๆ แต่ด้วยประสิทธิภาพที่แตกต่างกัน

1. การใช้เครื่องหมายวงเล็บ:

var str = "Test"; var lastLetter = str[str.length - 1];

แต่ไม่แนะนำให้ใช้วงเล็บ ตรวจสอบเหตุผลที่นี่

2. charAt [ดัชนี]:

var lastLetter = str.charAt(str.length - 1)

สิ่งนี้สามารถอ่านได้และเร็วที่สุดในหมู่ผู้อื่น เป็นวิธีที่แนะนำมากที่สุด

3. ซับสตริง:

str.substring(str.length - 1);

4. ชิ้น:

str.slice(-1);

มันเร็วกว่าซับสตริงเล็กน้อย

คุณสามารถตรวจสอบประสิทธิภาพได้ที่นี่

ด้วย ES6:

คุณสามารถใช้ได้ str.endsWith("t");

แต่ไม่รองรับใน IE ตรวจสอบรายละเอียดเพิ่มเติมเกี่ยวกับสิ้นสุดได้ที่นี่


2
ไม่จำเป็นต้องทำการบีบอัดประสิทธิภาพบนเครื่องปัจจุบัน ใช้วิธีแก้ปัญหาที่กระชับที่สุด โหวตของฉันคือวันที่str.slice(-1);
avalanche1

1
ฉันไม่แน่ใจว่าendsWithเหมาะกับที่นี่ที่ทำสิ่งที่แตกต่างอย่างสิ้นเชิง
John Montgomery

38

ใช้สตริงย่อยด้วยพารามิเตอร์-1 :

"linto.yahoo.com." substr (-1).

เท่ากับ "."

บันทึก:

ในการแยกอักขระออกจากจุดสิ้นสุดของสตริงให้ใช้หมายเลขเริ่มต้นเชิงลบ (ซึ่งไม่สามารถใช้งานได้ใน IE 8 และรุ่นก่อนหน้า)


3
ดูเหมือนว่าอันนี้จะสั้นกว่า slice () ฉันสงสัยว่าอันไหนดีกว่าและเร็วกว่า
stramin

12

วิธีง่ายๆในการทำเช่นนี้คือใช้ :)

var word = "waffle"
word.endsWith("e")

1
สวยและเรียบง่าย +1
Julian

1
นอกจากนี้ ES6 ที่ดีจริงๆ แต่มันไม่ทำงานใน IE ถ้าคุณต้องสนับสนุนมันมันสามารถpolyfilledได้
sanjsanj

ฉันไม่เห็นว่าสิ่งนี้ตอบคำถามได้อย่างไรการรับอักขระตัวสุดท้ายของสตริงนั้นแตกต่างจากการตรวจสอบอย่างสมบูรณ์ว่าตรงกับอักขระที่ระบุหรือไม่
John Montgomery


4

ใช้ฟังก์ชันJavaScript charAtเพื่อรับตัวอักษรในตำแหน่งดัชนี 0 ที่กำหนด ใช้ความยาวเพื่อค้นหาระยะเวลาของสตริง คุณต้องการตัวละครตัวสุดท้ายที่มีความยาว - 1. ตัวอย่าง:

var word = "linto.yahoo.com.";
var last = word.charAt(word.length - 1);
alert('The last character is:' + last);

4
var firstName = "Ada";
var lastLetterOfFirstName = firstName[firstName.length - 1];

ในขณะที่ข้อมูลโค้ดนี้อาจแก้ไขคำถามรวมถึงคำอธิบายช่วยปรับปรุงคุณภาพของโพสต์ของคุณ จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและคนเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำรหัสของคุณ โปรดอย่าพยายามทำให้รหัสของคุณแน่นเกินไปด้วยคำอธิบายที่อธิบายซึ่งจะช่วยลดความสามารถในการอ่านของทั้งรหัสและคำอธิบาย!
kayess

0

คุณสามารถใช้วิธีการง่ายๆ ES6

const lastChar = (str) => str.split('').reverse().join(',').replace(',', '')[str.length === str.length + 1 ? 1 : 0];


// example
console.log(lastChar("linto.yahoo.com."));

สิ่งนี้จะใช้ได้ในทุกเบราว์เซอร์


0

คุณสามารถใช้สิ่งต่อไปนี้ ในกรณีของตัวละครตัวสุดท้ายมันเกินความจริง แต่สำหรับซับสตริงมันมีประโยชน์:

var word = "linto.yahoo.com.";
var last = ".com.";
if (word.substr(-(last.length)) == last)
alert("its a match");

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.