![](/img/trans.png)
[英]How to convert lowercase string to uppercase string without toUppercase() function
[英]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()
),您必須:
寫樣板函數的東西:
function strLowerCase(str) { let newStr = ""; // TODO return newStr; }
循環遍歷原始字符串的每個字符,並獲得其代碼點:
function strLowerCase(str) { let newStr = ""; for(let i = 0; i < str.length; i++) { let code = str.charCodeAt(i); // TODO } return newStr; }
檢查字符是否為大寫字母。 在ASCII中 ,代碼點在65
到90
(含)之間的字符是大寫字母。
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; }
如果字符是大寫字母,則在其代碼點上加上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; }
測試您的新功能:
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.