2013-03-26 63 views
2

我有一個字符串中,我要檢查一些if條件,並做一些替換操作如下,代碼優化與如果條件檢查一起的replaceAll

for(int i =0; i<10;i++){ 
    if(name[i].contains("sometext")){ 
     name[i] = name[i].replaceAll("someregexpattern","replacementtexthere"); 
    } 
} 

不是檢查「sometext的存在如果「使用每次'狀態,我可以簡單地把它如下,

for(int i =0; i<10;i++){ 
     name[i] = name[i].replaceAll("someregexpattern","replacementtexthere"); 
} 

無論如何,如果字符串‘名’不包含‘regexpattern’的意思,它不會取代任何東西。那麼,if條件在性能方面是否有任何意義。

在此先感謝。

+1

這將可能取決於多久,如果條件爲真(假設'.contains'比'.replaceAll'便宜)。你最好針對你的特定用例測試這個,methinks。 – akaIDIOT 2013-03-26 10:02:56

+0

replaceall應該是replaceAll。你的代碼編譯? – 2013-03-26 10:04:30

+0

@Achintya Jha - 這是一個錯字。糾正。謝謝:) – Dinesh 2013-03-26 10:07:17

回答

2

這將是唯一的,如果sometext相同someregexpattern有效。否則,if條件確實重要。

假設您的someregexpattern確實出現在字符串中,但是您的if條件評估爲false,那麼您不應該進行替換。但是,如果您刪除if聲明,則會發生替換,這不完全相同。

E.g: -爲了幫助您更好地理解。

String testCondition = "dontReplace"; 
     String myString = "Hi, I'm SO"; 
     String regex = "SO"; 
     String replacement = "Not SO"; 

     if(myString.contains(testCondition)){ 
      myString = myString.replaceAll(regex, replacement); // stays "Hi, I'm SO" 
     } 

     myString = myString.replaceAll(regex, replacement); // Becomes "Hi, I'm Not SO" 

正如你看到的,要求是,String更換不應該發生,因爲條件爲dontReplace,但自從if被刪除,替換髮生了,即使它不應該。

+0

謝謝!這對我幫助很大 :) – Dinesh 2013-03-26 11:06:12

0

「如果」本身不會影響性能。 雖然現在函數調用相當便宜,但String.contains()會執行4-5多個函數調用。

但是,前者的變體是更好的可讀性和更少的錯誤傾向。

0

「在性能方面有什麼意義」,也取決於整個事情是如何經常在你的軟件執行。

探查器運行(通過visualvm左右)會告訴你是否有大量執行時間用於String#replaceAll()。如果不是這樣,你不會通過優化來獲得顯着的改進。這聽起來很明顯,但它經常被人遺忘。

如果優化不會帶來顯著的收益,你幾乎總是與選擇的代碼更易讀變種更好。