簡體   English   中英

計算字符串中的大小寫字符

[英]Counting upper and lower case characters in a string

首先,我知道這遠非專業。 我正在嘗試學習如何使用字符串。 這個應用程序應該做的是接受一個簡單的文本輸入並用它做一些事情:

數字母,數大小寫字母,數單詞和數空格。 這是我所做的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Case Check</title>
    <script type="text/javascript">
        function checkCase(text)
        {   

            var counter = 0;
            var letters = 0;
            var lowercase = 0;
            var uppercase = 0;
            var spaces = 0;
            var words = 0;


            for(; counter < text.length; counter++)
            {
                if(isUpperCase(text.charAt(counter))) {uppercase ++; letters++;}
                if(isLowerCase(text.charAt(counter))) {lowercase ++; letters++;} 
                if((text.charAt(counter) == " ") && (counter < text.length))
                {
                    spaces += 1;
                    words += 1;
                }
                if((text.charAt(counter) == ".") || (text.charAt(text(counter)) == ",")) continue;
            }
            return  [letters, lowercase, uppercase, spaces, words];
        }

        function isUpperCase(character)
        {
            if(character == character.toUpperCase) return true;
            else return false;
        }

        function isLowerCase(character)
        {
            if(character == character.toLowerCase) return true;
            else return false;
        }
    </script>
</head>
<body>
    <script type="text/javascript">
        var typed = prompt("Enter some words.");
        var result = checkCase(typed);
        document.write("Number of letters: " + result[0] + "br /");
        document.write("Number of lowercase letters: " + result[1] + "br /");
        document.write("Number of uppercase letters: " + result[2] + "br /");
        document.write("Number of spaces: " + result[3] + "br /");
        document.write("Number of words: " + result[4] + "br /");
    </script>
</body>

根據用戶的建議進行了一些更改。 現在的問題是它不會讓我將“文本”視為字符串對象。

使用正則表達式。

示例

var s = "thisIsAstring";
var numUpper = s.length - s.replace(/[A-Z]/g, '').length;  

// numUpper = 2

更多見JavaScript 替換/正則表達式

您可以使用 match() 和正則表達式。

var str = "aBcD"; 
var numUpper = (str.match(/[A-Z]/g) || []).length;    // 2

不確定是否是整個問題,但對這個問題不好

if(text.charAt(letters)) == " " && text(letters) < text.length)
                       ^

應該是

if(text.charAt(letters) == " ") && text(letters) < text.length)
                              ^

事實上我會做到的

if((text.charAt(letters) == " ") && (text(letters) < text.length))

isUpperCaseisLowerCase不是 JavaScript 函數。

你可以用類似的東西替換它們

var isUpperCase = function(letter) {
    return letter === letter.toUpperCase();
};

var isLowerCase = function(letter) {
    return letter === letter.toLowerCase();
};

您的代碼中有很多語法錯誤需要檢查。

我也對你所有的括號感到困惑,所以我沒有使用charAt而是像數組一樣引用字符串。 因此,我使用text[letters]而不是text.charAt(letters) ,我發現它更容易閱讀。

這里查看完整的 jsFiddle。 我稍微修改了你的代碼,因為 jsFiddle 不允許document.write

另一種使用 CharCodeAt() 方法的解決方案。

const bigLettersCount = (str) => {
  let result = 0;
  for (let i = 0; i < str.length; i += 1) {
    if (str.charCodeAt(i) > 64 && str.charCodeAt(i) <91 ) {
      result += 1;
    }
   }
   return result
  }

console.log(bigLettersCount('Enter some words.'))

另一種解決方案是使用Array.from()創建一個包含str每個字符的數組,然后使用reduce()來計算大寫字母的數量。

 const str = 'HeLlO'; const res = Array.from(str).reduce((acc, char) => { return acc += char.toUpperCase() === char; }, 0); console.log(res);

當字符串包含 UTF8 或變音符號時,這里的大多數解決方案都會失敗。 可以在 turbocommons 庫中找到適用於所有字符串的改進版本,這里:

https://github.com/edertone/TurboCommons/blob/1e230446593b13a272b1d6a2903741598bb11bf2/TurboCommons-Php/src/main/php/utils/StringUtils.php#L391

示例:

// Returns 2
StringUtils.countByCase('1聲A字43B45-_*[]', StringUtils.FORMAT_ALL_UPPER_CASE);

// Returns 1
StringUtils.countByCase('1聲A字43B45a-_*[]', StringUtils.FORMAT_ALL_LOWER_CASE);

更多信息在這里:

https://turbocommons.org/en/blog/2019-10-15/count-capital-letters-in-string-javascript-typescript-php

在這里在線玩:

https://turbocommons.org/en/app/stringutils/count-capital-letters

暫無
暫無

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

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