簡體   English   中英

計算字符串中每個字符的出現次數

[英]Count number of occurrences for each char in a string

我想使用 JavaScript 計算給定字符串中每個字符出現的次數。

例如:

var str = "I want to count the number of occurrences of each char in this string";

Output 應該是:

h = 4;
e = 4; // and so on 

我試着用谷歌搜索,但沒有找到任何答案。 我想實現這樣的目標; 順序無關緊要。

這在 JavaScript(或任何其他支持地圖的語言)中非常非常簡單:

// The string
var str = "I want to count the number of occurrences of each char in this string";

// A map (in JavaScript, an object) for the character=>count mappings
var counts = {};

// Misc vars
var ch, index, len, count;

// Loop through the string...
for (index = 0, len = str.length; index < len; ++index) {
    // Get this character
    ch = str.charAt(index); // Not all engines support [] on strings

    // Get the count for it, if we have one; we'll get `undefined` if we
    // don't know this character yet
    count = counts[ch];

    // If we have one, store that count plus one; if not, store one
    // We can rely on `count` being falsey if we haven't seen it before,
    // because we never store falsey numbers in the `counts` object.
    counts[ch] = count ? count + 1 : 1;
}

現在counts具有每個字符的屬性; 每個屬性的值是計數。 你可以像這樣輸出:

for (ch in counts) {
    console.log(ch + " count: " + counts[ch]);
}

更短的答案,減少:

let s = 'hello';
var result = [...s].reduce((a, e) => { a[e] = a[e] ? a[e] + 1 : 1; return a }, {}); 
console.log(result); // {h: 1, e: 1, l: 2, o: 1}
let str = "atul kumar srivastava";
let obj ={};
for(let s of str)if(!obj[s])obj[s] = 1;else obj[s] = obj[s]  + 1;
console.log(obj)

我遍歷每個字符並將其與計數一起放入嵌套對象中。 如果字符已經存在於對象中,我只需增加計數。 這是 myObj 的樣子:

myObj = {
char1 = { count : <some num> },
char2 = { count : <some num> },
....
}

這是代碼:

function countChar(str) {
    let myObj= {};
    for (let s of str) {
        if ( myObj[s] ? myObj[s].count ++ : myObj[s] = { count : 1 } );
    }
    return myObj;
}

var charCount = countChar('abcceddd');

這對我來說效果很好:

function Char_Count(str1) {
    var chars = {};
    str1.replace(/\S/g, function(l){chars[l] = (isNaN(chars[l]) ? 1 : chars[l] + 1);});
    return chars;
}

var myString = "This is my String";
console.log(Char_Count(myString));

您可以在 Javascript 中使用 ES6 中的地圖。 在我看來,提供了一個更簡潔的代碼。 這是我將如何去做

function countChrOccurence ('hello') {
 let charMap = new Map();
 const count = 0;
  for (const key of str) {
   charMap.set(key,count); // initialize every character with 0. this would make charMap to be 'h'=> 0, 'e' => 0, 'l' => 0, 
  }

  for (const key of str) {
    let count = charMap.get(key);
    charMap.set(key, count + 1);
  }
// 'h' => 1, 'e' => 1, 'l' => 2, 'o' => 1

  for (const [key,value] of charMap) {
    console.log(key,value);
  }
// ['h',1],['e',1],['l',2],['o',1]
}  

我給你非常非常簡單的代碼。

 // Converts String To Array var SampleString= Array.from("saleem"); // return Distinct count as a object var allcount = _.countBy(SampleString, function (num) { return num; }); // Iterating over object and printing key and value _.map(allcount, function(cnt,key){ console.log(key +":"+cnt); }); // Printing Object console.log(allcount);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> <p>Set the variable to different value and then try...</p>

str = "aaabbbccccdefg";

words = str.split("");

var obj = [];

var counter = 1, jump = 0;

for (let i = 0; i < words.length; i++) {
    if (words[i] === words[i + 1]) {
        counter++;
        jump++;
    }
    else {
        if (jump > 0) {
            obj[words[i]] = counter;
            jump = 0;
            counter=1
        }
        else
            obj[words[i]] = 1;
    }

}
console.log(obj);

1-liner ES6 方式:

const some_string = 'abbcccdddd';
const charCountIndex = [ ...some_string ].reduce( ( a, c ) => ! a[ c ] ? { ...a, [ c ]: 1 } : { ...a, [ c ]: a[ c ] + 1 }, {} );
console.log( charCountIndex )

您可以將對象用於任務。

第 1 步 - 創建一個對象

第 2 步 - 遍歷字符串

第 3 步 - 在對象中添加字符作為鍵和字符計數作為值

var obj={}

function countWord(arr)
{
for(let i=0;i<arr.length;i++)
{
if(obj[arr[i]]) //check if character is present in the obj as key
{
    obj[arr[i]]=obj[arr[i]]+1; //if yes then update its value
}
else
{
    obj[arr[i]]=1; //initialise it with a value 1

}
}
}

    function cauta() {

        var str = document.form.stringul.value;
        str = str.toLowerCase();
        var tablou = [];

        k = 0;
        //cautarea caracterelor unice
        for (var i = 0, n = 0; i < str.length; i++) {
            for (var j = 0; j < tablou.length; j++) {
                if (tablou[j] == str[i]) k = 1;
            }
            if (k != 1) {
                if (str[i] != ' ')
                    tablou[n] = str[i]; n++;
            }
            k = 0;
        }
        //numararea aparitilor
        count = 0;
        for (var i = 0; i < tablou.length; i++) {
            if(tablou[i]!=null){
            char = tablou[i];
            pos = str.indexOf(char);
            while (pos > -1) {
                ++count;
                pos = str.indexOf(char, ++pos);

            }

            document.getElementById("rezultat").innerHTML += tablou[i] + ":" + count + '\n';
            count = 0;
        }
        }

    }

此函數將每個唯一的字符放入數組中,然后在 str 中查找每個字符的外觀。 在我的案例中,我獲取數據並將其放入

 // Converts String To Array var SampleString= Array.from("saleem"); // return Distinct count as a object var allcount = _.countBy(SampleString, function (num) { return num; }); // Iterating over object and printing key and value _.map(allcount, function(cnt,key){ console.log(key +":"+cnt); }); // Printing Object console.log(allcount);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> <p>Set the variable to different value and then try...</p>

希望這可以幫助某人

function getNoOfOccurences(str){
    var temp = {};
    for(var oindex=0;oindex<str.length;oindex++){
        if(typeof temp[str.charAt(oindex)] == 'undefined'){
            temp[str.charAt(oindex)] = 1;
        }else{
            temp[str.charAt(oindex)] = temp[str.charAt(oindex)]+1;
        }
    }
    return temp;
}
    package com.company;

import java.util.HashMap;


 public class Main {

    public static void main(String[] args) {
    // write your code here
    HashMap<Character, Integer> sHashMap = new HashMap();  // using hashMap<key , value > here key = character and  value = count

    String arr = "HelloWorld";

    for (int i = 0; i < arr.length(); i++) {
        boolean flag = sHashMap.containsKey(arr.charAt(i));  // check if char is already  present 

    if (flag == true)
        {
            int Count = sHashMap.get(arr.charAt(i)); // get the char count
            sHashMap.put(arr.charAt(i), ++Count); //   increment the count and update in hashMap
        } 
        else 
        {
            sHashMap.put(arr.charAt(i), 1); //if  char not present then insert into hashMap
        }
    }

     System.out.println(sHashMap);
    //OutPut would be like ths {r=1, d=1, e=1, W=1, H=1, l=3, o=2}

}

}

我使用了 Map 對象,該 map 對象不允許您設置任何重復鍵,這使我們的工作變得容易。 我正在檢查 key 是否已經存在於 map 中,如果沒有,我正在插入並將計數設置為 1,如果它已經存在,我正在獲取值然后遞增

const str = "Hello H"
    const strTrim = str.replace(/\s/g,'') // HelloH
    const strArr=strTrim.split('')

    let myMap = new Map(); // Map object 

    strArr.map(ele=>{
    let count =0
    if(!myMap.get(ele)){
    myMap.set(ele,++count)
    }else {
    let cnt=myMap.get(ele)
    myMap.set(ele,++cnt)
    }
    console.log("map",myMap)
    })
let newStr= "asafasdhfasjkhfweoiuriujasfaksldjhalsjkhfjlkqaofadsfasasdfas";
       
function checkStringOccurnace(newStr){
    let finalStr = {};
    let checkArr = [];
    let counterArr = [];
    for(let i = 0; i < newStr.length; i++){
        if(checkArr.indexOf(newStr[i]) == -1){
            checkArr.push(newStr[i])
            let counter = 0;
            counterArr.push(counter + 1)
            finalStr[newStr[i]] = 1;
        }else if(checkArr.indexOf(newStr[i]) > -1){
            let index = checkArr.indexOf(newStr[i])
            counterArr[index] = counterArr[index] + 1;
            finalStr[checkArr[index]] = counterArr[index];
        }
    }
    return finalStr;
}

let demo = checkStringOccurnace(newStr);
console.log(" finalStr >> ", demo);

我用檢查“空白空間”和“特殊字符”進行了嘗試:

function charCount(str){
    const requiredString = str.toLowerCase();

    const leng = str.length;

    let output = {};

    for(let i=0; i<leng; i++){
        const activeCharacter = requiredString[i];
        if(/[a-z0-9]/.test(activeCharacter)){
            output.hasOwnProperty(activeCharacter) ? output[activeCharacter]++ : output[activeCharacter] = 1;
        }
    }
    return output;
}
["

'🌯🌯🍣🍻'.split('')
//=> ["\ud83c", "\udf2f", "\ud83c", "\udf2f", "\ud83c", "\udf63", "\ud83c", "\udf7b"]

為了檢查和避免空格並將大寫字母轉換為小寫和計數,我們可以像下面那樣做。

function CountNumberOfCharacters(str) {
  let countObject = {};
  const lowerCaseString = str.toLowerCase();
  for (let char of lowerCaseString) {
    if (!countObject[char] && char !== ' ') {
      countObject[char] = 1;
    } else if (char !== ' ') {
      countObject[char] = countObject[char] + 1;
    }
  }
  return countObject;
}

這是最簡單的解決方案,您可以找到 n 個字符串字母、數字、特殊字符等。任何 position 中的總數。 謝謝

 let stringValue = "AAABCCDDDDDDFFFGGG333333++++"; let stringArray = stringValue.split(""); let stringCompressorArray = []; for (let value of stringArray) { let stringFindeArray = stringArray.filter((str) => { return str === value; }); let repeatValueCounter = stringFindeArray.length + value; if (stringCompressorArray.indexOf(repeatValueCounter) < 0) { stringCompressorArray.push(repeatValueCounter); } } let result = stringCompressorArray.join(", "); console.log("result", result);

快速、簡潔、易於理解

var str = "a a  a   d";

const countChars = str =>{
    const rs = {}
    for (let word of str) {
        if (word !== " ") rs[word] = rs[word] + 1|| 1;
    }
    return rs;
}
countChars(str)

試試這個

let txt = 'hello';
let txtArr = txt.split('');
let objCnt = txtArr.reduce((accum, currVal) => {
    accum[currVal] = (accum[currVal] || 0) + 1;
    return accum;
}, {});
console.log(objCnt);

我認為最少的代碼行是最好的解決方案。 像這樣。

let text= 'I want to count the number of occurrences of each char in this string';

const obj = {};

for (let i = 0; i < text.length; i++) {
    const ele = text[i];
    obj[ele] === undefined ? obj[ele] = 1 : obj[ele]++
}

console.log(obj);

第二個例子。

text.split('').forEach((ele) => {
    obj[ele] === undefined ? obj[ele] =1 : obj[ele]++ 
})
console.log(obj);

暫無
暫無

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

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