簡體   English   中英

在Java中通過字符串的最有效方式是什么?

[英]What is the most efficient way to go through string's chars in Javascript?

我看到在SO上也有類似的問題,但沒有找到一個符合我特定目標的問題。

我開發了一個小功能,它可以循環通過一個字符串(假設在10到160個字符之間)來提取

  • 通配符(例如$ 1,$ 2等)-稱為“特殊”
  • 他們之間的串

要解析的字符串示例:“ word1 word2 $ 1 word3 $ 2 word4 $ 3”。

輸出示例:

{
    strings: [word1 word2, word3, word4],
    specialChars: 3
}

當然,也存在極限情況(無通配符,僅1個通配符,通配​​符可以位於字符串的開頭或結尾)。

到目前為止,我編寫的算法如下(有一些問題需要解決,但在這個問題上,我對效率的關注比對結果的興趣更大):

function parsestr(str: string) {
    let specialChars = [],
        plaintextParts = [],
        resultObject = {
            strings: [],
            specialChars: 0
        };

    // convert to char array and loop
    str.split('').forEach(function(c, i){
       if (c=='$') specialChars.push(i);
    });
    resultObject.specialChars = specialChars.length;

    // extract plain text parts
    if (specialChars.length == 0) return resultObject;

    // part before first wildcard
    if (specialChars[0]>0) plaintextParts.push(str.substr(0, specialChars[0]-1));
    // 2..N
    for (var i=1; i<specialChars.length-1; i++) {
        plaintextParts.push(str.substr(specialChars[i-1]+2, specialChars[i]-1));
    }
    // last part
    if (specialChars[specialChars.length-1]+1 < str.length-1)
        plaintextParts.push(str.substr(specialChars[specialChars.length-2]+2, specialChars[specialChars.length-1]-1));

    resultObject.strings = plaintextParts;
    return resultObject;
}

// call function and print output
var jsonString = "word1 word2 $1 word3 $2 word4 $3";
console.log(JSON.stringify(parseJsonString(jsonString)));

您可以只使用正則表達式:

let str = "word1 word2 $1 word3 $2 word4 $3";
let regex = /\$[0-9]/;
let strSplit = str.split(regex);
console.log(JSON.stringify(strSplit)); // ["word1 word2 ", " word3 ", " word4 ", ""]

如果您不希望最后一個空字符串,可以隨時將其關閉。

因此,如果您想要“特殊字符”的數量,則可以只取結果strSplit的長度,然后減去一個。

在效率方面,這似乎是微優化,尤其是對於不超過160個字符的字符串。 使代碼以一種清晰易懂的方式工作比優化每個操作的效率更為重要。

在優化代碼時,請嘗試使通用解決方案更有效,然后在以后優化細節。 假設此功能不是憑空存在的,請在優化諸如字符串操作之類的內容之前,着重研究應用本身的性能並找出實際性能瓶頸在哪里。

暫無
暫無

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

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