/** 把輸入文本與特定的表達式進行匹配,如果匹配則返回匹配的文本,否則返回空字符 */
public String match(String inputText);
}
BetterRegExpMatcher
class BetterRegExpMatcher {
public BetterRegExpMatcher(...);
/** 向匹配子程序提供多種格式的輸入━━String、字符數組和字符數組的子集。如果不匹配則返回-1,如果匹配,則返回匹配開始處的偏移量 */
public int match(String inputText);
public int match(char[] inputText);
public int match(char[] inputText, int offset, int length);
/** 如果匹配,則返回匹配的長度,調用程序可以從返回的匹配開始處偏移量和長度重新構造匹配的文本 */
public int getMatchLength();
/** 如果調用程序需要,這個例程可以很方便地構造出匹配字符串 */
public String getMatchText();
}
大量使用BadRegExpMatcher的程序要比使用BetterRegExpMatcher的程序運行速度慢一些。第一,調用程序必須創建String對象向match()傳遞參數,match()也必須創建一個String對象向調用程序返回匹配的文本。每次調用時都會創建二個對象,這聽起來也許沒有什么大問題,但如果頻繁地調用match(),創建這二個對象對性能產生的影響就大了。使用BadRegExpMatcher的程序的性能問題并不源于其編碼而源于其接口,象這樣設計的接口,臨時對象的創建是不可避免的。
BetterRegExpMatcher用比較簡單的數據類型(整型、字符數組)取代了在match()中使用的String對象,從而無需在調用程序和match()之間通過中間對象傳遞數據。
由于在設計階段比在完成整個程序后再進行修改能夠更好地避免程序性能方面的問題,因此應該在類的接口如何處理對象的創建這個問題上多花些時間。在RegExpMatcher中,其方法要求輸入和返回String對象就可能對性能有潛在的影響,因為String類的對象是不可變的,因此對String類對象參數進行處理就會要求在每次調用時創建一個新的String對象。
文章來源于領測軟件測試網 http://www.kjueaiud.com/