як отримати останній символ рядка?


526

Як отримати останній символ рядка:

"linto.yahoo.com."

Останній символ цього рядка - "."

Як я можу це знайти?


Чи можете ви прийняти цю відповідь, оскільки вона найкраща і повинна бути відображена першою.
Шарку

Відповіді:


995

Елегантною і короткою альтернативою є String.prototype.sliceметод.

Просто:

str.slice(-1);

Індекс негативного початку відрізає рядок від length+index, до length, будучи індексом -1, вилучається останній символ:

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

9
Бічна примітка: масиви також мають slice()метод. - Їх функціональність концептуально схожа (часткові копії) -------- (Про всяк випадок, якщо ви читаєте код і бачите .slice())
Пітер Айтай

1
Що ви маєте на увазі під "рядком UTF-8"? Фраза не має сенсу. FWIW, хоча, рядки JavaScript самі по собі є кумедними звірами: вони є послідовностями непідписаних 16-бітових цілих значень. Якщо метою вашої рядка є збереження символів, то вищевказаний код повертає останнє 16-бітове значення, що було б непогано, якби це була друга частина сурогатної пари. Але знову ж таки, що саме ви маєте на увазі під "рядком UTF-8"? UTF-8 - це схема кодування, яка може мати сенс, якби у вас був байтовий масив, але нічого не означає, якщо мова йде про рядки. Просто цікаво.
Ray Toal

4
Зрозуміло, бо це не відповідає на питання. Він передбачає, що користувач хоче просто видалити персонаж, але що робити, якщо вам потрібно зафіксувати останнього символу та відповісти на основі того, що він є? Відповіді str.charAt () є правильними.
gregtczap

6
@Egg, здається , що ви не пробували мій приклад, str.slice(-1)дійсно отримати останній символ рядка (відповідно з вимогами ОП), так само , як якщо б ви використовували str.charAt(str.length - 1), спробуйте: "abc".slice(-1). Я показував тут використання String.prototype.sliceз негативним індексом. str.slice(-n)отримає останні nсимволи вихідної рядки як нове значення рядка. Більше інформації: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
CMS

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


63
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тут підходить, що робить щось зовсім інше.
Джон Монтгомері

38

Використовуйте підряд з параметром -1 :

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

дорівнює "."

Примітка:

Щоб витягнути символи з кінця рядка, використовуйте від'ємне початкове число (Це не працює в IE 8 і раніше).


3
Здається, що цей коротший, як фрагмент (), мені цікаво, який з них кращий і швидший.
страйм

12

Простий спосіб зробити це за допомогою цього :)

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

1
Приємний і простий +1
Джуліан

1
Насправді гарне доповнення до ES6, але воно не працює в IE, якщо вам доведеться його підтримувати, проте він може бути заповнений поліефіром .
sanjsanj

Я не бачу, як це відповідає на питання взагалі, отримання останнього символу рядка зовсім не відрізняється від перевірки, чи відповідає він певному символу.
Джон Монтгомері


4

Використовуйте функцію charAt JavaScript, щоб отримати символ у заданій позиції, що індексується 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");

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.