如何将重复的字符串合二为一。 比如: string str1 = "中华人", str2 = "人民共", str3 = "共和国"; 上面上面三个字符串合成一个字符串,他的值为“中华人民共和国” 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最简单的方式:string str=str1+str2+str3; str1 =str1 +str2+str1 int i,j,nLen,nLen1,nLen2,nStringCunt;string sRet="",sTmp="";for(i=0;i>nStringCunt-1;i++){ nLen1=string[i].Length(); nLen2=string[i+1].Length(); nLen=nLen1>nLen2?nLen2:nLen1; for (j=1;j>=nLen;j++) { if(string[i].substring(nLen1-j,j)<>string[i+1].substring(1,j)) { string[i+1]=string[i+1].substring(j,nLen2-j); break; } }}for(i=0;i>nStringCunt;i++){ sRet=sRet+string[i];}return sRet;大概的思路就是这样子的,没有测试过 ArrayList.Contains 方法线性查询,去msn上看看 string str1 = "中华人", str2 = "人民共", str3 = "共和国"; str1 = str1.Substring(0, str1.Length - 1); str3 = str3.Substring(1, str1.Length ); label1.Text = str1 + str2 + str3; 那这样的呢?string st1="名不正则言不顺",st2="言不顺则事不成",st3="事不成则礼乐不兴",st4="礼乐不兴则刑罚不中",st5="刑罚不中则民无所措手足"; 这也叫解决问题????????????str1="中华人民", str2="人民共和", str3="共和国";这样一来你怎么办???? private string StringJoin(string Str1, string Str2) { int intI = 0; if (Str1.Length < Str2.Length) { intI = Str1.Length; } else { intI = Str2.Length; } do { if (Str1.Substring(Str1.Length - intI, intI) == Str2.Substring(0, intI)) { break; } else { intI = intI - 1; if (intI == 0) break; } } while (true); return Str1 + Str2.Substring(intI); }调用:str1 = StringJoin(str1, str2);str1 = StringJoin(str1, str3);MessageBox.Show(str1); string str1 = "中华人"; string str2 = "人民共"; string str3 = "共和国"; str1 = str1 + GetFilterString(str1, str2) + GetFilterString(str2, str3);public string GetFilterString(string str1, string str2) { string sTempValue = ""; for (int i = str2.Length ; i >= 1; i--) { if (str1.Substring( str1.Length- i , i ) == str2.Substring(0,i )) { if (i == str2.Length ) { return ""; } sTempValue = str2.Substring(i, str2.Length - i ); break; } } return sTempValue == "" ? str2 : sTempValue; }感觉意义不大. string str1 = "中华人", str2 = "人民共", str3 = "共和国"; string str = str1 + str2 + str3;string output = Regex.Replace(str,@"(\w)(?=[^\1]*\1)","");//结果是将重复的去掉 只保留最后一个 “中华人民共和国”//23楼的结果为 “名正言顺事成礼乐兴刑罚不中则民无所措手足” 如果只有这种情况的话,很简单啊:str= str1.Substring(0, str1.Length-1)+str2.Substring(0, str2.Length-1) +str3.Substring(0, str3.Length-1); 如果各种情况都有,还是用正则表达式好!如楼上 28楼的大侠能解释下Regex.Replace(str,@"(\w)(?=[^\1]*\1)","");方法里的参数都是什么意思? Regex.Replace(str,@"(\w)(?=[^\1]*\1)",""); //哎 编译器里看一下不就行了吗!!!//第一个,源字符串;第二个,要匹配的字符串,这里是正则来读取得;第三个,替换成的字符串。 static string MergeStr(string[] strs) { if (strs.Length > 1) { StringBuilder strB = new StringBuilder(); strB.Append(strs[0]); for (int i = 0; i < strs.Length - 1; i++) { string Currentstr = strs[i]; string Nextstr = strs[i + 1]; int IndexOfNextstr = Nextstr.IndexOf(Currentstr[Currentstr.Length - 1]); if (Currentstr[Currentstr.Length - 1 - IndexOfNextstr] == Nextstr[0]) { strB.Append(Nextstr.Substring(IndexOfNextstr + 1)); } } return strB.ToString(); } else if (strs.Length == 1) { return strs[0]; } else { return string.Empty; } } //28楼的可能有点问题。用下列的检验,试试看。string str1 = "中人华人民", str2 = "人民共和", str3 = "共和国";//结果:“中华人民共和国”而不是“中人华人民共和国”//敢问楼主,“中人华人民共和国”这个应该是所要的吧?//试试看我的代码 string str1 = "中人华人民", str2 = "人民共和", str3 = "共和国"; string str = string.Format("{0}{1}{2}", str1, str2, str3); Regex objRegex = new Regex(@"(\S+?)(?=\1)"); //Regex objRegex = new Regex(@"(\w)(?=[^\1]*\1)"); string result = objRegex.Replace(str, ""); Response.Write(string.Format("Input : {0}<br />Result : {1}<br />", str, result));/*结果:Input : 中人华人民人民共和共和国Result : 中人华人民共和国 */ 输出结果正确。 static void Main(string[] args) { string[] strs1 = new string[] { "ABC", "CDEF", "EFGH" }; Console.WriteLine(MergeStr(strs1)); string[] strs2 = new string[] { "中华人", "人民共", "民共和国" }; Console.WriteLine(MergeStr(strs2)); string[] strs3 = new string[] { "中华人", "人共", "共" }; Console.WriteLine(MergeStr(strs3)); Console.ReadKey(); } // .net 3.0 or abovestring s1 = "中人华人民", s2 = "人民共和", s3 = "共和国";var result = new String(s1.ToCharArray().Union(s2.ToCharArray()).Union(s3.ToCharArray()).ToArray()); 高难度,请教lamda表达式 vsto Ajax 问题 算法 再问个小问题??? 关于访问数据库的问题! windows服务调试问题 字段绑定匹配的问题!马上结贴! 小女子又有问题了! 有没有介绍c#和.net好一些的网站? 自己做的登录窗口,出现点问题,请高手帮忙……………… C# backgroundWorker遇到的变态问题
string sRet="",sTmp="";for(i=0;i>nStringCunt-1;i++)
{
nLen1=string[i].Length();
nLen2=string[i+1].Length();
nLen=nLen1>nLen2?nLen2:nLen1;
for (j=1;j>=nLen;j++)
{
if(string[i].substring(nLen1-j,j)<>string[i+1].substring(1,j))
{
string[i+1]=string[i+1].substring(j,nLen2-j);
break;
}
}
}
for(i=0;i>nStringCunt;i++)
{
sRet=sRet+string[i];
}
return sRet;
大概的思路就是这样子的,没有测试过
str1 = str1.Substring(0, str1.Length - 1);
str3 = str3.Substring(1, str1.Length );
label1.Text = str1 + str2 + str3;
str1="中华人民", str2="人民共和", str3="共和国";这样一来你怎么办????
{
int intI = 0;
if (Str1.Length < Str2.Length)
{
intI = Str1.Length;
}
else
{
intI = Str2.Length;
}
do
{
if (Str1.Substring(Str1.Length - intI, intI) == Str2.Substring(0, intI))
{
break;
}
else
{
intI = intI - 1;
if (intI == 0) break;
}
}
while (true);
return Str1 + Str2.Substring(intI);
}
调用:
str1 = StringJoin(str1, str2);
str1 = StringJoin(str1, str3);
MessageBox.Show(str1);
string str1 = "中华人"; string str2 = "人民共"; string str3 = "共和国";
str1 = str1 + GetFilterString(str1, str2) + GetFilterString(str2, str3);
public string GetFilterString(string str1, string str2)
{
string sTempValue = "";
for (int i = str2.Length ; i >= 1; i--)
{
if (str1.Substring( str1.Length- i , i ) == str2.Substring(0,i ))
{
if (i == str2.Length ) { return ""; }
sTempValue = str2.Substring(i, str2.Length - i );
break;
}
}
return sTempValue == "" ? str2 : sTempValue;
}
感觉意义不大.
string str1 = "中华人", str2 = "人民共", str3 = "共和国";
string str = str1 + str2 + str3;
string output = Regex.Replace(str,@"(\w)(?=[^\1]*\1)","");
//结果是将重复的去掉 只保留最后一个 “中华人民共和国”
//23楼的结果为 “名正言顺事成礼乐兴刑罚不中则民无所措手足”
如果各种情况都有,还是用正则表达式好!如楼上
方法里的参数都是什么意思?
Regex.Replace(str,@"(\w)(?=[^\1]*\1)","");
//哎 编译器里看一下不就行了吗!!!
//第一个,源字符串;第二个,要匹配的字符串,这里是正则来读取得;第三个,替换成的字符串。
{
if (strs.Length > 1)
{
StringBuilder strB = new StringBuilder();
strB.Append(strs[0]); for (int i = 0; i < strs.Length - 1; i++)
{
string Currentstr = strs[i];
string Nextstr = strs[i + 1];
int IndexOfNextstr = Nextstr.IndexOf(Currentstr[Currentstr.Length - 1]); if (Currentstr[Currentstr.Length - 1 - IndexOfNextstr] == Nextstr[0])
{
strB.Append(Nextstr.Substring(IndexOfNextstr + 1));
}
} return strB.ToString();
}
else if (strs.Length == 1)
{
return strs[0];
}
else
{
return string.Empty;
}
}
//28楼的可能有点问题。用下列的检验,试试看。
string str1 = "中人华人民", str2 = "人民共和", str3 = "共和国";
//结果:“中华人民共和国”而不是“中人华人民共和国”
//敢问楼主,“中人华人民共和国”这个应该是所要的吧?//试试看我的代码 string str1 = "中人华人民", str2 = "人民共和", str3 = "共和国";
string str = string.Format("{0}{1}{2}", str1, str2, str3);
Regex objRegex = new Regex(@"(\S+?)(?=\1)"); //Regex objRegex = new Regex(@"(\w)(?=[^\1]*\1)"); string result = objRegex.Replace(str, "");
Response.Write(string.Format("Input : {0}<br />Result : {1}<br />", str, result));/*
结果:
Input : 中人华人民人民共和共和国
Result : 中人华人民共和国
*/
{
string[] strs1 = new string[] { "ABC", "CDEF", "EFGH" };
Console.WriteLine(MergeStr(strs1)); string[] strs2 = new string[] { "中华人", "人民共", "民共和国" };
Console.WriteLine(MergeStr(strs2)); string[] strs3 = new string[] { "中华人", "人共", "共" };
Console.WriteLine(MergeStr(strs3)); Console.ReadKey();
}
var result = new String(s1.ToCharArray().Union(s2.ToCharArray()).Union(s3.ToCharArray()).ToArray());