簡體   English   中英

Java字符串替換

[英]Java string replace

我是Java的新手,我正在嘗試學習優化代碼以使其准備就緒。 我下面有以下代碼。 我想知道如何優化它。我認為通過使用一小段可能的方法,這將是學習的好方法。

一些要點:
1.該功能將運行很多次,因此需要快速。
2.輸入不受限制,因為它可能來自用戶或文件。 有沒有辦法解決這個問題,所以不會拋出異常? 我當時正在考慮使用正則表達式。
3.還有什么我需要做的才能使它投入生產嗎? 例如單元測試。 如果是這樣,最好的方法是什么?
4.我假設要搜索的字符串不是很長。
5.當我說優化時,我的意思是做諸如以更快的速度替換'+'運算符之類的事情,因為它會影響內存和性能等。

public String strReplave(String originalStr, String oldStr, String newStr) {
    int start = 0;
    while ((start = originalStr.indexOf(oldStr, start)) > 0) {
        originalStr= originalStr.substring(0,start) + newStr+ originalStr.substring(start + oldStr.length());
    start += newStr.length();
}
return originalStr;
}

感謝您的幫助,如果您需要我澄清任何事情,請告訴我。

沒有什么能擊敗內置方法input.replace(old,new) ,因此沒有理由真正嘗試自己重新實現它。

兩點:

  1. String類中有一個replaceAll和replaceFirst方法(與regex一起使用),您可能想使用它。
  2. 在代碼中效率極低的一件事是,您使用'+'運算符連接了字符串。 您應該查看StringBuilder類。

這是我用的:

public static String replaceString(String cadena, String word, String newWord) {
    Pattern pat = Pattern.compile(word);   
    Matcher mat = pat.matcher(cadena);  
    return mat.replaceAll(newWord); 
}

您實際上不需要了解Regex即可使用它,因為它將與文字字符串(如"a literal string"匹配,我不知道它是否正是您要的,但對我來說很好用。

除了使用內置函數外,僅需兩美分。 讓它明顯的代碼做什么。 但是請包括程序可能失敗的所有可能條件。

使用try{} catch() {異常處理}

嘗試優化代碼之前,請先測量您的代碼以及瓶頸所在的位置。 不要猜

public static String replace(String originalStr, String oldStr, String newStr) {
    int p = originalStr.indexOf(oldStr);
    if (p == -1) {
        return originalStr;
    } else {
        StringBuilder result = new StringBuilder();
        result.append(originalStr, 0, p);
        result.append(newStr);
        int q = p + oldStr.length();
        while ((p = originalStr.indexOf(oldStr, q)) != -1) {
            result.append(originalStr, q, p);
            result.append(newStr);
            q = p + oldStr.length();
        }
        result.append(originalStr, q, originalStr.length());
        return result.toString();
    }
}
  • 使用StringBuilder連接字符串。
  • 如果找不到搜索字符串,則進行優化。 如果不是很頻繁,可以跳過此步驟。

暫無
暫無

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

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