关于字符串的截取问题,在线等...
例如象手机短信那样,当一条短信的内容太长了,首先要截取一段发出,再接下来发。假设手机短信每一次最大能发40个汉字,这条短信的内容很长,要分段的发送。用substring这个函数会出错,因为在截取的时候,有时候会出现值超出范围。短信的长度是变化的。那位朋友告诉我一下,如何实现。。 问题点数:50、回复次数:9Top
1 楼wwfy(我舞飞扬)回复于 2006-07-04 11:31:37 得分 0
先判断有多么长,看看能截断几次。最后一次注意一下参数值。Top
2 楼7707(kingfisher)回复于 2006-07-04 11:32:19 得分 0
有时候会出现值超出范围。
-------
先判断长度再截取. if(str.length>80){substring.....Top
3 楼celas(长刀公主)回复于 2006-07-04 11:33:09 得分 5
给你两个函数:
public static string Substr(string input, int start) {
if (input == null || Math.Abs(start) > input.Length) {
return null;
} else if (start < 0) {
return input.Substring(Math.Max(0, input.Length + start));
} else {
return input.Substring(start);
}
}
public static string Substr(string input, int start, int len) {
if (input == null || Math.Abs(start) > input.Length || len < 0) {
return null;
} else if (start < 0) {
return input.Substring(Math.Max(0, input.Length + start), Math.Min(Math.Abs(start), len));
} else {
return input.Substring(start, Math.Min(input.Length - start, len));
}
}Top
4 楼celas(长刀公主)回复于 2006-07-04 11:42:29 得分 0
上面两个函数是我参照 PHP 的处理逻辑写的. 给出使用例子:
string x = "12345";
Substr(x, 0); // y 值为 "12345"
Substr(x, -1); // y 值为 "1234"
Substr(x, 100); // y 值为 null
第二个函数类似, 但加入了长度参数.
===============================
同时会 .NET 和 PHP 的都知道,
.NET 的 Substring() 函数使用极其不便, 输入的参数必须在限定范围内才能得出结果, 否则异常.
而 PHP 的 substr() 就比较人性化, 他会尽量截取有意义的那部分, 输入的参数甚至可以是负数, 非常体贴.
Top
5 楼celas(长刀公主)回复于 2006-07-04 11:46:48 得分 0
楼上的例子有些笔误, 补全:
string x = "12345";
string y = null;
y = Substr(x, 0); // y 值为 "12345"
y = Substr(x, -1); // y 值为 "1234"
y = Substr(x, 100); // y 值为 null
y = Substr(x, 0, 2); // y 值为 "12"
y = Substr(x, 0, -1); // y 值为 null; (这里和 PHP 不同, PHP 会截取负长度, 个人感觉该方式逻辑比较混乱)
y = Substr(x, -4, 2); // y 值为 "23"Top
6 楼sportboy51()回复于 2006-07-04 12:06:44 得分 0
怎么都没有用到for循环的
Top
7 楼celas(长刀公主)回复于 2006-07-04 12:28:19 得分 0
为什么要用 forTop
8 楼sportboy51()回复于 2006-07-04 12:39:39 得分 0
作判断阿,假设我这条短信125个汉字,最少要发4次,所以用for循环进行发送Top
9 楼kssys()回复于 2006-07-04 13:00:16 得分 45
int iCurPos = 0;
int iMaxSendLength = 20;
string strSendText = "axckdsafl;sajfsa;fjdsa;jfsa;fjsa;fjskrjqp8u-4327fsaf-82-41";
while (iCurPos < strSendText.Length)
{
string strCurSendText;
if (iCurPos + iMaxSendLength < strSendText.Length)
strCurSendText = strSendText.Substring(iCurPos, iMaxSendLength);
else
strCurSendText = strSendText.Substring(iCurPos, strSendText.Length - iCurPos);
//发送资料
//休息一会
System.Threading.Thread.Sleep(500);
iCurPos += iMaxSendLength;
}Top




