как получить последний символ строки?


526

Как получить последний символ строки:

"linto.yahoo.com."

Последний символ этой строки "."

Как я могу найти это?


Не могли бы вы принять этот ответ, так как он самый лучший и должен отображаться первым.
Sharku

Ответы:


995

Элегантная и короткая альтернатива, это String.prototype.sliceметод.

Просто:

str.slice(-1);

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

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

9
Примечание: у массивов также есть slice()метод. - Их функциональные возможности концептуально схожи (частичные копии) -------- (на всякий случай, если вы читаете код и видите .slice())
Питер Айтай

1
Что вы подразумеваете под "строкой UTF-8"? Фраза не имеет смысла. Впрочем, строки JavaScript сами по себе являются забавными животными: они представляют собой последовательности беззнаковых 16-битных целочисленных значений. Если ваша строка предназначена для хранения символов, то приведенный выше код возвращает последнее 16-битное значение, что было бы не красиво, если бы это была вторая часть суррогатной пары. Но опять же, что именно вы подразумеваете под "строкой UTF-8"? UTF-8 - это схема кодирования, которая может иметь смысл, если у вас есть байтовый массив, но ничего не значит, когда дело касается строк. Просто любопытно.
Рэй Тоал

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

98

Используйте 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 [index]:

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

Используйте substr с параметром -1 :

"Linto.yahoo.com." ЗиЬзЬги (-1).

равно "."

Замечания:

Чтобы извлечь символы из конца строки, используйте отрицательный начальный номер (это не работает в IE 8 и более ранних версиях).


3
Кажется, что этот короче, чем slice (), интересно, какой из них лучше и быстрее.
страмин

12

Простой способ сделать это с помощью этого :)

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

1
Красиво и просто +1
Юлиан

1
Действительно хорошее дополнение к ES6, но оно не работает в IE, если вам нужно его поддерживать, хотя оно может быть заполнено .
sanjsanj

Я вообще не вижу, как это отвечает на вопрос, получение последнего символа строки полностью отличается от проверки, соответствует ли он конкретному символу.
Джон Монтгомери


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");

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.