首页 新闻 会员 周边 捐助

关于string.Replace( oldstr,newstr)遇到的实际问题,求秒!!!!

0
悬赏园豆:15 [已解决问题] 解决于 2012-10-12 15:37

今天得到一个bug反馈,反应有个客户端得出的信息不对,看了下是从excel中取出来的数据转换为string字符串显示给用户,一步步debug,发现程序本身没问题,就是取出第10列的值开始出现问题,看了很久发现出现在Replace这个函数上:

字符串str =str.Replace(第一个参数循环取的(1,2,3。。9,10,11)第二个参数( 值1,值2,。。值10,。。)这样表述可能不太正确,但问题是值1中的1和值10中10都成功的把1这个值给替换了导致显示的时候到第10列出现了问题。。听得懂不?

现在需要解决的是如何搞个替代方法解决这个bug!

代码如下:

View Code
 1 if (ds.Tables.Count > 0)
 2                 {
 3                     int Colum = ds.Tables[0].Columns.Count;
 4                     for (int i = 0; i < 1; i++)
 5                     {
 6                         for (int j = 1; j < Colum; j++)
 7                         {
 8                             TitleContent += ds.Tables[0].Rows[i][j] + "FTep" + "" + j + "" + ",";
 9                         }
10                     }
11                     foreach (DataRow dr in ds.Tables[0].Rows)
12                     {
13                         string pno = dr[0].ToString();
14                         SendContent = TitleContent;
15                         if (SMSCommonFunc.IsMobilePhone(pno))
16                         {
17                             if (TempCheckPhone.IndexOf(pno) == -1)
18                             {
19                                 
20                                 TempCheckPhone += pno + ",";
21                                 for (int km = 1; km < Colum; km++)
22                                 {
23                                     SendContent = SendContent.Replace("FTep" + km.ToString(), dr[km].ToString());
24                                 }
十四的主页 十四 | 初学一级 | 园豆:46
提问于:2012-10-12 13:22
< >
分享
最佳答案
1

按照你拼接FTep的那个字符串,我觉得这个样子应该可以:

SendContent = SendContent.Replace("FTep" + km.ToString(), dr[km].ToString());改为
SendContent = SendContent.Replace("FTep" + km.ToString() + ",", dr[km].ToString() + ",";
 
收获园豆:15
念念啊 | 菜鸟二级 |园豆:415 | 2012-10-12 14:44

加一个“,”进入字符串并没有改变什么啊,比如"FTep1,  "  "FTep10," 这两个中间的FTep1还是可能被替换啊

十四 | 园豆:46 (初学一级) | 2012-10-12 14:47

@十四: 不会哦,加个这个应该是"FTep1,"被替换,然后“FTep10,”被替换的,你试了?

念念啊 | 园豆:415 (菜鸟二级) | 2012-10-12 14:53

@念念啊: 试了下的确可以显示正确了,为什么呢,我自己推理了下感觉还是会被替换啊。因为加“,”在是FTep1后面啊,会变成FTep1, 和 FTep10, 为什么就不会替换了,有点搞不懂!

十四 | 园豆:46 (初学一级) | 2012-10-12 15:33

@十四: 那个Replace(参数1,参数2),参数1和参数2都是整体呀,参数1被参数2替换。当我加了逗号后,替换“FTep1,”的时候那么“FTep10,”中并不存在“FTep1,”,所以FTep10就不会被替换到啊。不晓得这样解释明白的不。

念念啊 | 园豆:415 (菜鸟二级) | 2012-10-12 15:42
其他回答(4)
0

太乱了,为啥不把循环写在外面呢

田林九村 | 园豆:2367 (老鸟四级) | 2012-10-12 13:29

因为要循环取值嘛,怎么会乱呢,excel表格是循环取值的啊

支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2012-10-12 13:31
for (int km = 0; km < Colum; km++)
                              {
                              SendContent = SendContent.Replace("FTep" + (km+1).ToString(), dr[km].ToString());
                               }

 

 

 

支持(0) 反对(1) 田林九村 | 园豆:2367 (老鸟四级) | 2012-10-12 13:38

@田林九村: km+1的话岂不是无法替代赋值了?

支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2012-10-12 13:48
0

没懂,楼主不能把代码放上来点???

羽商宫 | 园豆:2490 (老鸟四级) | 2012-10-12 13:30

代码放上了!!

支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2012-10-12 13:32
1

不能从后往前替换?

向往-SONG | 园豆:4853 (老鸟四级) | 2012-10-12 13:32

貌似可以试试!

支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2012-10-12 13:33

@十四: 

或者给FTep后面数字加个东西再去替换。

SendContent = TitleContent;
SendContent =Regex.Replace(SendContent ,@"FTep(\d+)","FTep$1 ");
....
SendContent = SendContent.Replace("FTep" + km.ToString()+" ", dr[km].ToString());
支持(0) 反对(0) 向往-SONG | 园豆:4853 (老鸟四级) | 2012-10-12 14:17

@向往-SONG: 加东西的话,比如"FTep$1,  "  "FTep$10," 这两个中间的FTep1还是会被替换的吧

支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2012-10-12 14:50

@十四: 

不会,如下:

"FTep1,FTep10,".Replace("FTep1,","值1");

支持(0) 反对(0) 向往-SONG | 园豆:4853 (老鸟四级) | 2012-10-12 14:55

@向往-SONG: 应该会的,“值1”会把FTep10中的“FTep1”也换成值1这样FTep10的值就变成了“值10”

支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2012-10-12 15:21

@十四: 

后面还有个逗号啊,你运行下上面代码就知道了。

支持(1) 反对(0) 向往-SONG | 园豆:4853 (老鸟四级) | 2012-10-12 15:25

@念念啊: 试了下的确可以显示正确了,为什么呢,我自己推理了下感觉还是会被替换啊。因为加“,”在是FTep1后面啊,会变成FTep1, 和 FTep10, 为什么就不会替换了,有点搞不懂!

支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2012-10-12 15:34

@十四: 

 FTep10,"包含"FTep1,"吗?显然不,可能是你之前看习惯了FTep1和FTep10,再加个逗号眼神还没反应过来哈。。

支持(1) 反对(0) 向往-SONG | 园豆:4853 (老鸟四级) | 2012-10-12 15:43

@向往-SONG: 十分感谢你,这个问题我竟然纠结了3个小时。。我的时间,我的生命被您挽救了!!

支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2012-10-12 17:29
0

原来字符串是什么样子,啥规律, 要替换的新字符串是啥样子,写个例子啊

Qlin | 园豆:2403 (老鸟四级) | 2012-10-12 14:01

原字符串是这样FTep+J.tostring()(J是列)要转换成excel中的具体值。 FTep1....FTep10然后后面替换的时候FTep1把FTep10中的FTep1也给换掉了。。

支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2012-10-12 14:04

@十四: 

楼上的行,如果没有重复的,可以限制每次替换时只替换一次

 SendContent = new Regex("FTep" + km.ToString()).Replace(SendContent, dr[km].ToString(), 1, 0); 
支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2012-10-12 14:32

这样的话,第一次的时候,“值1”会把FTep10中的“FTep1”也换成值1这样FTep10的值就变成了“值10”,而FTep10则没有值了

支持(0) 反对(0) 十四 | 园豆:46 (初学一级) | 2012-10-12 15:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册