var alimama_pid="mm_10096109_566393_892186"; var alimama_titlecolor="0000FF"; var alimama_descolor ="000000"; var alimama_bgcolor="FFFFFF"; var alimama_bordercolor="E6E6E6"; var alimama_linkcolor="008000"; var alimama_bottomcolor="FFFFFF"; var alimama_anglesize="0"; var alimama_bgpic="0"; var alimama_icon="0"; var alimama_sizecode="11"; var alimama_width=760; var alimama_height=90; var alimama_type=2;
首先我們來看2個需要用到SubString()的地方:
1、 在C#中,我們時常需要縮減字符,並且用"..."取代被縮減的部分,通常我們使用的是(string).SubString(),然後我們可以這樣縮減:
str = (str.Length>10)? str.SubString(0,10)+"..." : str ;
這樣的寫好處是比較容易想到,且簡要易懂,便於編寫。
這樣寫的不足是格式比較生硬,不便於復用,編寫效率低。
2、 我在開發一些項目的時候,還經常有這樣的需求:一個N長度的字符串,要取末尾的幾個字符,或者中間指定起始和結尾的一段字符,其余的用"..."表示,這時候往往需要比較復雜的判斷,最後用一個(string).SubString()。
下面我提供一種可以同時解決靈活性和繁瑣判斷的解決方案,希望可以拋磚引玉:

/**//// <summary>
/// 區字符串固定長度,其余的省略
///
/// 規則:
/// 1.如果startIndex大於字符串長度,則自動調整到取最後maxLangth長度。如果此時maxLangth長度比字符串長度還要大,那麼startIndex回到0
/// 2.如果在startIndex基礎上,取maxLangth長度大於比字符串長度,那麼maxLangth自動取到可能的最大值,即從startIndex一直取到字符串末尾
/// 3.結果中,字符串只要有削減的地方,都以".."替代
/// </summary>
/// <param name="str">原字符串</param>
/// <param name="startIndex">起始字符串位置</param>
/// <param name="maxLangth">最長字符個數</param>
/// <returns></returns>
public static string SubString(string str, int startIndex, int maxLangth)
{
string substring = "";
//調整startIndex
if (startIndex > str.Length - 1)//如果startIndex大於字符串長度
{
startIndex = (str.Length - maxLangth > 0) ? str.Length - maxLangth : 0;//則自動調整到取最後maxLangth長度。如果此時maxLangth長度比字符串長度還要大,那麼startIndex回到0
}
//調整maxLangth
if (startIndex + maxLangth > str.Length)//如果在startIndex基礎上,取maxLangth長度大於比字符串長度
{
maxLangth = str.Length - startIndex;//那麼maxLangth自動取到可能的最大值,即從startIndex一直取到字符串末尾
}
//調整完成
//加縮略符號
substring += (startIndex > 0) ? ".." : "";//如果開頭削減,以".."替代
//進行取定長字符串
substring += str.Substring(startIndex, maxLangth);
//加縮略符號
substring += (str.Length - startIndex - maxLangth > 0) ? ".." : "";//如果結尾削減,以".."替代
return substring;
}
你可以把這段程序放在一個單獨的類庫中,比如Common.StringHandle。由於采用了靜態方式,你只需要這樣直接調用:
str = Common.StringHandle.SubString(str , 7 , 8) ;
關於處理機制和參數說明,在編寫的時候我已經說明的比較詳細了,下面我居舉一些簡單的例子:
要求:字符串“0123456789”中,取前5個字符,其余用“..”替代
代碼:Common.StringHandle.SubString("0123456789",0,5)
輸出結果:01234..
要求:字符串“0123456789”中,取“5”開始的3字符(不足3個則全取),如果之後還有其余用“..”替代
代碼:Common.StringHandle.SubString("0123456789",5,3)
輸出結果:..567..
要求:字符串“0123456789”中,取“5”開始的10字符(不足10個則全取),如果之後還有其余用“..”替代
代碼:Common.StringHandle.SubString("0123456789",5,10)
輸出結果:..56789
我在這也只是給出一種思路,這段代碼還有很多的擴展余地:比如約定".."的形式、實現從右截取N個字符,或者在.Net3.5中使用擴展方法(Extension Method)來完成等等(有些我已經實現,但由於加進來可能沖淡主題了,在此省略,不過我們可以例外探討)。
希望可以拋磚引玉,跟大家一起探討!
原文地址:http://www.cnblogs.com/szw/archive/2007/12/17/1003321.Html