web-dev-qa-db-ja.com

JavaScriptでアルファベットの次の文字を取得する方法は?

CouchDBビューから検索するオートコンプリートを作成しています。

入力文字列の最後の文字を取得し、最後の文字を英語のアルファベットの次の文字で置き換えることができるようにする必要があります。 (ここでは国際化の必要はありません)

例えば:

  • 入力文字列 = "b"
  • startkey = "b"
  • endkey = "c"

[〜#〜]または[〜#〜]

  • 入力文字列 = "foo"
  • startkey = "foo"
  • endkey = "fop"

(ご参考までに、オプション_inclusive_end=false_を含めて、この余分な文字が結果セットを汚さないようにしています)


質問

  • JavaScriptにネイティブで、アルファベットの次の文字を取得できる関数はありますか?
  • それとも、それを吸い上げて、「abc ... xyz」のような基本文字列とindexOf()を使用して独自のファンシー関数を実行する必要があるだけですか?
32
Dominic Barnes
my_string.substring(0, my_string.length - 1)
      + String.fromCharCode(my_string.charCodeAt(my_string.length - 1) + 1)
42
icktoofay

//これは、Zの場合はA、zの場合はaを返します。

function nextLetter(s){
    return s.replace(/([a-zA-Z])[^a-zA-Z]*$/, function(a){
        var c= a.charCodeAt(0);
        switch(c){
            case 90: return 'A';
            case 122: return 'a';
            default: return String.fromCharCode(++c);
        }
    });
}
25
kennebec

MS Excelが列の番号付け方法に応じて次の文字を取得する、より包括的なソリューション... A B C ... Y Z AA AB ... AZ BA ... ZZ AAA

これは小さな文字でも機能しますが、大文字にも簡単に拡張できます。

getNextKey = function(key) {
  if (key === 'Z' || key === 'z') {
    return String.fromCharCode(key.charCodeAt() - 25) + String.fromCharCode(key.charCodeAt() - 25); // AA or aa
  } else {
    var lastChar = key.slice(-1);
    var sub = key.slice(0, -1);
    if (lastChar === 'Z' || lastChar === 'z') {
      // If a string of length > 1 ends in Z/z,
      // increment the string (excluding the last Z/z) recursively,
      // and append A/a (depending on casing) to it
      return getNextKey(sub) + String.fromCharCode(lastChar.charCodeAt() - 25);
    } else {
      // (take till last char) append with (increment last char)
      return sub + String.fromCharCode(lastChar.charCodeAt() + 1);
    }
  }
  return key;
};
15
kumarharsh

これは同じことをする関数ですが(大文字のみを除き、変更は簡単です)、sliceを1回だけ使用し、再帰的ではなく反復的です。簡単なベンチマークでは、それは約4倍高速です(これは、それを本当に頻繁に使用する場合にのみ関連します!)。

function nextString(str) {
    if (! str)
        return 'A'  // return 'A' if str is empty or null

    let tail = ''
    let i = str.length -1
    let char = str[i]
    // find the index of the first character from the right that is not a 'Z'
    while (char === 'Z' && i > 0) {
        i--
        char = str[i]
        tail = 'A' + tail   // tail contains a string of 'A'
    }
    if (char === 'Z')   // the string was made only of 'Z'
        return 'AA' + tail
    // increment the character that was not a 'Z'
    return str.slice(0, i) + String.fromCharCode(char.charCodeAt(0) + 1) + tail

}

5
mbl
var input = "Hello";
var result = ""
for(var i=0;i<input.length;i++)
{
  var curr = String.fromCharCode(input.charCodeAt(i)+1);
  result = result +curr;
}
console.log(result);
0
Bipul Yadav