您的位置:首页 > 编程语言 > C#

【转载】C#写的字符串截取函数

2007-08-20 15:16 441 查看
今天写同样的方法的时候查找了下网络上的东西,发现几个写得好的方法,临时做个笔记,参看一下。只做学习参考,没时间整理,随便摆在这里 ,整理的时候再看一下,别无他意。

字符串截取函数

public string CutStr(string sInString,int iCutLength){

if(sInString==null || sInString.Length==0 || iCutLength<=0) return "";

int iCount=System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(sInString);

if(iCount>iCutLength){

int iLength=0;

for(int i=0;i<sInString.Length;i++){

int iCharLength=System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(new char[]{sInString[i]});

iLength += iCharLength;

if(iLength==iCutLength){

sInString=sInString.Substring(0,i+1);

break;

}else if(iLength>iCutLength){

sInString=sInString.Substring(0,i);

break;

}

}

}

return sInString;

}

在ASP.NET或C#中,怎么截取字符串

protected string CutString(string str,int length)

{

string newString="";

if(str!="")

{

if(str.Length>length)

{

newString=str.Substring(0,length)+"...";

}

else

{

newString=str;

}

}

return newString;

}

然后在绑定的时候:

<%# CutString(DataBinder.Eval(Container.DataItem,"NewTitle").ToString(),5) %>

asp.net(c#) datelist DataGrid 中截取字符串加"..." 和 鼠标放上去字符全部显示

前台

<asp:TemplateColumn HeaderText="绑定网址">

<HeaderStyle HorizontalAlign="Center" Width="100px"></HeaderStyle>

<ItemStyle HorizontalAlign="Center"></ItemStyle>

<ItemTemplate>

<FONT face="宋体">

<asp:HyperLink id="HyperLink1" runat="server" Target=_blank text='<%# PartSubString(DataBinder.Eval(Container.DataItem,"url").ToString())%>' NavigateUrl='<%# DataBinder.Eval(Container.DataItem,"url")%>' ToolTip='<%# DataBinder.Eval(Container.DataItem,"url")%>'>

</asp:HyperLink></FONT>

</ItemTemplate>

<FooterStyle HorizontalAlign="Center"></FooterStyle>

</asp:TemplateColumn>

后台.cs

protected string PartSubString(string s)

{

if(s.Length>15)

{

return s.Substring(0,15)+"...";

}

return s;

}

用C#截取指定长度的中英文混合字符串

我们常做的一件事情,就是在文章系统中,截取一定长度的文章标题,超过指定长度,就加“...”

如两个字符串:

string str1 = "中国人要啊abc呀~";

string str2 = "1中国人23456abc呀~";

要截取后,输出:

str1 = "中国人要...";

str2 = "1中国人2...";

即要把中英文混合的字符串,在截取后,长度要一致,即8个字节的长度(不包括三个点),而且不能出现中文被从中间截断的情况。于是写了个方法:

public static string getStr(string s,int l)

{

string temp = s ;

if (Regex.Replace(temp,"[\u4e00-\u9fa5]","zz",RegexOptions.IgnoreCase).Length<=l)

{

return temp;

}

for (int i=temp.Length;i>=0;i--)

{

temp = temp.Substring(0,i);

if (Regex.Replace(temp,"[\u4e00-\u9fa5]","zz",RegexOptions.IgnoreCase).Length<=l-3)

{

return temp + "";

}

}

return "";

}

调用:

string content = "中国人啊abc呀呀呀呀";

content = getStr(content,13);

C#截取指定长度中英文字符串方法 ()

string s = "iam方枪枪";

int len = s.Length;//will output as 6

byte[] sarr = System.Text.Encoding.Default.GetBytes(s);

len = sarr.Length;//will output as 3+3*2=9
public static string GetFirstString(string stringToSub, int length)

{

Regex regex = new Regex("[\u4e00-\u9fa5]+", RegexOptions.Compiled);

char[] stringChar = stringToSub.ToCharArray();

StringBuilder sb = new StringBuilder();

int nLength = 0;

bool isCut=false;

for(int i = 0; i < stringChar.Length; i++)

{

if (regex.IsMatch((stringChar[i]).ToString()))

{

sb.Append(stringChar[i]);

nLength += 2;

}

else

{

sb.Append(stringChar[i]);

nLength = nLength + 1;

}
if (nLength > length)

{

isCut=true;

break;

}

}

if(isCut)

return sb.ToString()+"..";

else

return sb.ToString();

}
C#截取指定长度中英文字符串方法 (修改)

public static string GetFirstString(string stringToSub, int length)

{

Regex regex = new Regex("[\u4e00-\u9fa5]+", RegexOptions.Compiled);

char[] stringChar = stringToSub.ToCharArray();

StringBuilder sb = new StringBuilder();

int nLength = 0;

for(int i = 0; i < stringChar.Length; i++)

{

if (regex.IsMatch((stringChar[i]).ToString()))

{

nLength += 2;

}

else

{

nLength = nLength + 1;

}

if (nLength <= length)

{

sb.Append(stringChar[i]);

}

else

{

break;

}

}

if(sb.ToString() != stringToSub)

{

sb.Append("...");

}

return sb.ToString();

}

******************************************************

1/**//// <summary>

2 /// 截取字符串,不限制字符串长度

3 /// </summary>

4 /// <param name="str">待截取的字符串</param>

5 /// <param name="len">每行的长度,多于这个长度自动换行</param>

6 /// <returns></returns>

7 public string CutStr(string str,int len)

8 { string s="";

9

10 for(int i=0;i<str.Length ;i++)

11 {

12 int r= i% len;

13 int last =(str.Length/len)*len;

14 if (i!=0 && i<=last)

15 {

16

17 if( r==0)

18 {

19 s+=str.Substring(i-len,len)+"<br>";

20 }

21

22 }

23 else if (i>last)

24 {

25 s+=str.Substring(i-1) ;

26 break;

27 }

28

29 }

30

31 return s;

32

33 }

34

35

36 /**//// <summary>

37 /// 截取字符串并限制字符串长度,多于给定的长度+。。。

38 /// </summary>

39 /// <param name="str">待截取的字符串</param>

40 /// <param name="len">每行的长度,多于这个长度自动换行</param>

41 /// <param name="max">输出字符串最大的长度</param>

42 /// <returns></returns>

43 public string CutStr(string str,int len,int max)

44 {

45 string s="";

46 string sheng="";

47 if (str.Length >max)

48 {

49 str=str.Substring(0,max) ;

50 sheng="";

51 }

52 for(int i=0;i<str.Length ;i++)

53 {

54 int r= i% len;

55 int last =(str.Length/len)*len;

56 if (i!=0 && i<=last)

57 {

58

59 if( r==0)

60 {

61 s+=str.Substring(i-len,len)+"<br>";

62 }

63

64 }

65 else if (i>last)

66 {

67 s+=str.Substring(i-1) ;

68 break;

69 }

70

71 }

72

73 return s+sheng;

74

75 }

**********************************************************

C#截取指定长度中英文字符串方法 using System.Text

public static string GetFirstString(string stringToSub, int length)

{

Regex regex = new Regex("[\u4e00-\u9fa5]+", RegexOptions.Compiled);

char[] stringChar = stringToSub.ToCharArray();

StringBuilder sb = new StringBuilder();

int nLength = 0;

bool isCut=false;

for(int i = 0; i < stringChar.Length; i++)

{

if (regex.IsMatch((stringChar[i]).ToString()))

{

sb.Append(stringChar[i]);

nLength += 2;

}

else

{

sb.Append(stringChar[i]);

nLength = nLength + 1;

}

if (nLength > length)

{

isCut=true;

break;

}

}

if(isCut)

return sb.ToString()+"..";

else

return sb.ToString();

}

我是从网上找的方法,然后添加了,如果是超过长度,则在后面添加".."字符。

这在做网站时,显示新闻标题最非常有用,为了保持页面的格局,对标题进行限定长度,这就需要对中文进行双字符计算。

表格换行代码:

style="table-layput:fixed; word-wrap:break-wrod; word-break:break-all;"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: