簡體   English   中英

在JS中手動將大寫字符串轉換為小寫字符串

[英]Convert uppercase string to lowercase string in JS manually

嘗試編寫一個函數,該函數返回轉換為小寫字母的調用字符串值。 訣竅是我不能使用toLocaleLowerCase()

以下是到目前為止的內容。

function charChange(char){
    for (var i=0; i<char.length; i++){
        var char2=charCodeAt(char[i])+32;
        var char3=String.fromCharCode(char2);
        if (char3 !== charCodeAt(97-122){
            alert("Please enter only letters in the function")
        }
    }
    return char;
}

要將字符串的大寫字母手動轉換為小寫(如果不手動執行,則應只使用String.prototype.toLowerCase() ),您必須:

  1. 寫樣板函數的東西:

     function strLowerCase(str) { let newStr = ""; // TODO return newStr; } 
  2. 循環遍歷原始字符串的每個字符,並獲得其代碼點:

     function strLowerCase(str) { let newStr = ""; for(let i = 0; i < str.length; i++) { let code = str.charCodeAt(i); // TODO } return newStr; } 
  3. 檢查字符是否為大寫字母。 在ASCII中 ,代碼點在6590 (含)之間的字符是大寫字母。

     function strLowerCase(str) { let newStr = ""; for(let i = 0; i < str.length; i++) { let code = str.charCodeAt(i); if(code >= 65 && code <= 90) { // TODO } // TODO } return newStr; } 
  4. 如果字符是大寫字母,則在其代碼點上加上32以使其小寫(是的,這是ASCII的創建者有意設計的決定)。 無論如何,將新字符附加到新字符串。

     function strLowerCase(str) { let newStr = ""; for(let i = 0; i < str.length; i++) { let code = str.charCodeAt(i); if(code >= 65 && code <= 90) { code += 32; } newStr += String.fromCharCode(code); } return newStr; } 
  5. 測試您的新功能:

     strLowerCase("AAAAAAABBBBBBBCCCCCZZZZZZZZZaaaaaaaaaaa&$*(@&(*&*#@!"); // "aaaaaaabbbbbbbccccczzzzzzzzzaaaaaaaaaaa&$*(@&(*&*#@!" 

charCodeAt()是在String上調用的方法,而不是函數。 因此,您將方法應用於字符串,並提供要轉換的字符的位置作為參數。 同樣,正如MultiplyByZer0提到的, char是保留字:查看保留字列表

以下代碼解決了該問題:

 function charChange(str) { var result = ""; for (var i = 0; i < str.length; i++) { var code = str[i].charCodeAt(0); if(code >= 65 && code <= 90) { var letter = String.fromCharCode(code+32); result += letter // append the modified character } else { result += str[i] // append the original character } } return result; } console.log(charChange('j#aMIE')); 

這是我目前可以想到的兩個最優雅的解決方案。 查看代碼中的注釋,不要猶豫,詢問是否不清楚。

 function charChange1 (str) { let result = ''; const len = str.length; // go over each char in input string... for (let i = 0; i < len; i++) { const c = str[i]; const charCode = c.charCodeAt(0); if (charCode < 65 || charCode > 90) { // if it is not a uppercase letter, // just append it to the output // (also catches special characters and numbers) result += c; } else { // else, transform to lowercase first result += String.fromCharCode(charCode - 65 + 97); } } return result; } function charChange2 (str) { // Array.prototype.slice.call(str) converts // an array-like (the string) into an actual array // then, map each entry using the same logic as above return Array.prototype.slice.call(str) .map(function (c) { const charCode = c.charCodeAt(0); if (charCode < 65 || charCode > 90) return c; return String.fromCharCode(charCode - 65 + 97); }) // finally, join the array to a string .join(''); } console.log(charChange1("AAAAsfasSGSGSGSG'jlj89345")); console.log(charChange2("AAAAsfasSGSGSGSG'jlj89345")); 


(在側節點上,當然可以用聲明為對'A'.charCodeAt(0)調用的常量替換魔術數字。)

(第二個節點:不要使用char,因為它是JavaScript中的保留字;我更喜歡c

您可以使用regex將字符串轉換為小寫:

:%s/.*/\L&/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM