新人问个超简单的问题,大家帮帮吗啊

yliang82 2011-05-18 01:14:01

body = ReceiveSmsStr.Substring(0, ReceiveSmsStr.IndexOf("#"));
ReceiveSmsStr = ReceiveSmsStr.Substring(ReceiveSmsStr.IndexOf("#") + 1);
time = ReceiveSmsStr.Substring(0, ReceiveSmsStr.IndexOf("|"));
ReceiveSmsStr = ReceiveSmsStr.Substring(ReceiveSmsStr.IndexOf("|"));

ss = body.Substring(3, 3);
if (ss == "dt")
{
MessageBox.Show(ss);
}

else
{
MessageBox.Show("有错?");
MessageBox.Show(ss);
}



这段代码有两给疑问,1.ss = body.Substring(3, 3);这句,从第三个字符开始,我想截取前两个字"dt",但是如果 body.Substring(3, 2);的话得到的值是"d",只有写成3,3 得到的值才是“dt”
2.取得值dt后,if (ss == "dt")这句执行结果却是两个值不相等,请问这是什么问题啊? 有空格? 空格怎么去除啊?新手不知道trim的格式怎么写。 或者是类型不对? 怎么转换呢?

请大家帮帮我
...全文
136 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yliang82 2011-05-18
  • 打赏
  • 举报
回复
看来是飞信的问题,用手机直接发送短信的话,就可以截取到dt,如果用飞信发的话,比如接收到得内容是:张三: dtajgg,d前面就会有个空格,所以应该是从第四个字符开始,但是为什么用 ss = body.Substring(4, 2),又会报13楼的错误呢
neo33233 2011-05-18
  • 打赏
  • 举报
回复
如果还是不对,个人感觉应该不是空格的问题,有可能是转义字符的问题

ss = body.Trim().Substring(3, 2);这里面的Trim用法、SubString用法都没问题的

建议LZ跟一下代码,看看Substring(3, 1)和Substring(3, 2)分别是什么
yliang82 2011-05-18
  • 打赏
  • 举报
回复
用trim不行,还是两值不匹配,用ss = body.Substring(4, 2),倒是匹配了,可是报错,其中的217行 就是 ss = body.Substring(4, 2)
See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.
Parameter name: length
at System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
at System.String.Substring(Int32 startIndex, Int32 length)
at war_tools.Form1.timer1_Elapsed(Object sender, ElapsedEventArgs e) in D:\短信平台-最新\sms\Form1.cs:line 217
tmacjohn 2011-05-18
  • 打赏
  • 举报
回复
ss.Equals("dt"),用equals相比较才是比较两个的值
636f6c696e 2011-05-18
  • 打赏
  • 举报
回复
ss = body.Substring(4, 2)
不就行了
yellowegg 2011-05-18
  • 打赏
  • 举报
回复
跟一下就知道了
cfanser 2011-05-18
  • 打赏
  • 举报
回复
一般对字符串处理都要先去掉空格!
kingdom_0 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zengguoyu 的回复:]

如果不是转义字符而是空格引起的,用下面的语句:
ss = body.Trim().Substring(3, 2);
Tirm()先去掉两边的空格,然后求子串
[/Quote]+1.
Dogfish 2011-05-18
  • 打赏
  • 举报
回复
(3,2)应该是对的。可能d前面有个空格。
zengguoyu 2011-05-18
  • 打赏
  • 举报
回复
如果不是转义字符而是空格引起的,用下面的语句:
ss = body.Trim().Substring(3, 2);
Tirm()先去掉两边的空格,然后求子串
Tragedy 2011-05-18
  • 打赏
  • 举报
回复
ss.trim()
xiaoqiu1234 2011-05-18
  • 打赏
  • 举报
回复
substring(int i ,int k) 检索子字符串。子字符串从指定的字符位置i开始且具有指定的长度k。
kid_wang 2011-05-18
  • 打赏
  • 举报
回复
substring(int i ,int k) 检索子字符串。子字符串从指定的字符位置i开始且具有指定的长度k。
所以你如果k=3的话,一定是截取了3个字符,显示成dt,可能是其中有转义字符,实际上并不是dt。

第二个问题就是因为第一个表面上显示dt,但实际上不是dt。

yliang82 2011-05-18
  • 打赏
  • 举报
回复
谁来帮帮我
tellxp 2011-05-18
  • 打赏
  • 举报
回复
trim()就是去掉头部和尾部空格,然后就可以了
sigh,看看msdn嘛

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧