文字列の最後の文字を取得する方法は?


526

文字列の最後の文字を取得する方法:

"linto.yahoo.com."

この文字列の最後の文字は "."

どうすればこれを見つけることができますか?


この回答は最良の回答であり、最初に表示する必要があるため、この回答を受け入れください。
Sharku

回答:


995

エレガントで短い代替手段は、String.prototype.sliceメソッドです。

ちょうどによって:

str.slice(-1);

負の開始インデックスは、文字列fromからlength+indextoをスライスしlength、インデックス-1として、最後の文字が抽出されます。

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

9
補足:配列にもslice()メソッドがあります。-それらの機能は概念的には類似しています(部分的なコピー)--------(コードを読んでいて参照している場合に備えて.slice()
Peter Ajtai

1
「UTF-8文字列」とはどういう意味ですか?このフレーズは意味がありません。FWIWですが、JavaScript文字列はそれ自体面白い動物です:それらは符号なし16ビット整数値のシーケンスです。文字列の意図が文字を格納することである場合、上記のコードは最後の16ビット値を返します。これは、サロゲートペアの2番目の部分である場合は適切ではありません。しかし、繰り返しますが、「UTF-8文字列」とは正確にはどういう意味ですか?UTF-8は、バイト配列がある場合に意味のあるエンコードスキームですが、文字列に関しては何も意味しません。ちょっと興味があるんだけど。
Ray Toal

4
これは質問に答えないため、反対票を投じました。これは、ユーザーがキャラクターを単に削除したいことを前提としていますが、最後のキャラクターをキャプチャし、それが何であるかに基づいて応答する必要がある場合はどうでしょうか。str.charAt()の答えは正しいものです。
gregtczap 2014

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/...
CMS

9
@CMSそうです、あなたのメソッドは実際にはそれをトリミングせずに文字列の最後の文字を取得します。素敵なエレガントな方法も。何らかの理由で、これらの文字をトリミングして、トリミングされた文字列を返すと考えていました。それについて申し訳ありませんが、私は最初にそれを試していないので馬鹿のように感じます。
gregtczap 2014年

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



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);
雪崩

1
endsWithここにどのように当てはまるかはわかりません。
John Montgomery

38

パラメータ-1を指定してsubstrを使用します。

「linto.yahoo.com。」。substr(-1);

「。」に等しい

注意:

文字列の末尾から文字を抽出するには、負の開始番号を使用します(これはIE 8以前では機能しません)。


3
これはslice()と同じくらい短いようですが、どちらがより速くて速いのでしょうか。
ストラミン、

12

それを行う簡単な方法はこれを使うことです:)

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

1
Julian

1
ES6への本当に良い追加ですが、サポートする必要がある場合はIEでは機能しませんが、ポリフィルすることはできます。
sanjsanj 2018年

これがどのように質問に答えるかはわかりません。文字列の最後の文字を取得することは、特定の文字と一致するかどうかを確認することとはまったく異なります。
John Montgomery


4

JavaScriptのcharAt関数を使用して、指定されたインデックス0の位置にある文字を取得します。文字列の長さを調べるには、lengthを使用します。あなたはそれが長さ-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 2016年

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.