jak uzyskać ostatni znak ciągu?


526

Jak uzyskać ostatni znak ciągu:

"linto.yahoo.com."

Ostatnim znakiem tego ciągu jest "."

Jak mogę to znaleźć?


czy możesz zaakceptować odpowiedź, ponieważ jest ona najlepsza i powinna zostać wyświetlona jako pierwsza.
Sharku

Odpowiedzi:


995

String.prototype.sliceMetoda jest elegancką i krótką alternatywą .

Tylko przez:

str.slice(-1);

Ujemny indeks początkowy wycina ciąg od length+index, do lengthindeksu -1, wyodrębniany jest ostatni znak:

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

9
Uwaga dodatkowa: tablice mają również slice()metodę. - Ich funkcjonalność jest koncepcyjnie podobna (kopie częściowe) -------- (Na wszelki wypadek czytasz kod i widzisz .slice())
Peter Ajtai

1
Co rozumiesz przez „ciąg UTF-8”? Fraza nie ma sensu. FWIW jednak, ciągi JavaScript same w sobie są zabawnymi bestiami: są sekwencjami 16-bitowych liczb całkowitych bez znaku. Jeśli celem twojego ciągu jest przechowywanie znaków, powyższy kod zwraca ostatnią 16-bitową wartość, co nie byłoby ładnie, gdyby była to druga część pary zastępczej. Ale co dokładnie rozumiesz przez „ciąg UTF-8”? UTF-8 to schemat kodowania, który może mieć sens, jeśli masz tablicę bajtów, ale nic nie znaczy, jeśli chodzi o łańcuchy. Po prostu ciekawy.
Ray Toal,

4
Zagłosowano, ponieważ to nie odpowiada na pytanie. Zakłada, że ​​użytkownik chce po prostu usunąć postać, ale co zrobić, jeśli chcesz uchwycić ostatnią postać i odpowiedzieć na podstawie tego, co to jest? Odpowiedzi na str.charAt () są poprawne.
gregtczap

6
@Egg, wydaje się, że nie próbować za moim przykładem, str.slice(-1)rzeczywiście dostać ostatni znak łańcucha (wymagane OP), tak jakby został użyty str.charAt(str.length - 1), spróbuj: "abc".slice(-1). Pokazałem tutaj użycie String.prototype.slicez indeksem ujemnym. str.slice(-n)otrzyma ostatnie nznaki oryginalnego ciągu jako nową wartość ciągu. Więcej informacji: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
CMS

9
@CMS Masz rację, twoja metoda faktycznie pobiera ostatni znak ciągu bez przycinania go. Również ładna, elegancka metoda. Z jakiegoś powodu myślałem, że zamierza przyciąć te znaki i zwrócić przycięty sznur. Przepraszam za to, czuję się jak idiota, że ​​najpierw tego nie spróbowałem.
gregtczap

97

Użyj charAt:

Metoda charAt () zwraca ciąg znaków o podanym indeksie.

Możesz użyć tej metody w połączeniu z lengthwłaściwością ciągu, aby uzyskać ostatni znak w tym ciągu.
Na przykład:

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)

Niektóre przeglądarki pozwalają (jako niestandardowe rozszerzenie) skrócić to do:

str[str.length - 1];

50

Możesz to osiągnąć na różne sposoby, ale z różną wydajnością,

1. Używając notacji nawiasowej:

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

Ale nie zaleca się używania nawiasów. Sprawdź przyczyny tutaj

2. charAt [indeks]:

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

Jest to między innymi czytelne i najszybsze. Jest to najbardziej zalecany sposób.

3. substring:

str.substring(str.length - 1);

4. plasterek:

str.slice(-1);

Jest nieco szybszy niż substring.

Możesz sprawdzić wydajność tutaj

Z ES6:

Możesz użyć str.endsWith("t");

Ale nie jest obsługiwany w IE. Sprawdź więcej szczegółów na temat końcówek tutaj


2
Nie ma potrzeby zmniejszania wydajności na obecnych maszynach. Użyj najbardziej zwięzłego rozwiązania. Mój głos jest włączonystr.slice(-1);
lawina 1

1
Nie jestem pewien, jak endsWithtu pasuje, robi to coś zupełnie innego.
John Montgomery

38

Użyj substr z parametrem -1 :

„linto.yahoo.com.”. substr (-1);

równa się "."

Uwaga:

Aby wyodrębnić znaki z końca łańcucha, użyj ujemnego numeru początkowego (nie działa w IE 8 i wcześniejszych).


3
Wydaje się, że ten jest krótszy niż slice (), zastanawiam się, który jest lepszy i szybszy.
stramin

12

Łatwy sposób to zrobić :)

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

1
Ładne i proste +1
Julian

1
Naprawdę dobry dodatek do ES6, ale nie działa w IE, jeśli musisz go obsługiwać, można go jednak uzupełnić .
sanjsanj

Nie rozumiem, jak to w ogóle odpowiada na pytanie, uzyskanie ostatniego znaku ciągu jest zupełnie inne niż sprawdzenie, czy pasuje on do określonego znaku.
John Montgomery

7

Ostatni znak możesz uzyskać w ten sposób:

var lastChar=yourString.charAt(yourString.length-1);

4

Użyj funkcji JavaScript charAt, aby uzyskać znak na danej pozycji 0-indeksowanej. Użyj długości, aby dowiedzieć się, jak długi jest ciąg. Chcesz ostatniego znaku, więc ma długość - 1. Przykład:

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];

Ten fragment kodu może rozwiązać pytanie, ale wyjaśnienie naprawdę pomaga poprawić jakość posta. Pamiętaj, że w przyszłości odpowiadasz na pytanie czytelników, a ci ludzie mogą nie znać przyczyn Twojej sugestii kodu. Staraj się również nie tłoczyć kodu objaśniającymi komentarzami, co zmniejsza czytelność zarówno kodu, jak i objaśnień!
kayess

0

Możesz użyć tej prostej metody ES6

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


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

Działa to we wszystkich przeglądarkach.


0

Możesz użyć następujących. W tym przypadku ostatniego znaku jest to przesada, ale dla podłańcuchu przydatne:

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

-1
>Try this...     

console.log("linto.yahoo.com.".charAt("linto.yahoo.com.".length-1));
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.