Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的字符串替换#_C#_String - Fatal编程技术网

C# C语言中的字符串替换#

C# C语言中的字符串替换#,c#,string,C#,String,我有一个名字列表,我循环使用它们在字符串变量(Bob、George、Will、Terry)中创建一个逗号分隔的列表 我需要名单最终看起来像(鲍勃、乔治、威尔和特里) 如何找到逗号的最后一个实例并将其替换为单词“and”?一旦我找到了最后一个例子,我认为这是一个简单的问题,做一些类似的事情 string new=ori.Substring(0,start) + rep + ori.Substring(start+rep.Length); 想法?评论?建议 谢谢, Bob这应该能帮到你: var

我有一个名字列表,我循环使用它们在字符串变量(Bob、George、Will、Terry)中创建一个逗号分隔的列表

我需要名单最终看起来像(鲍勃、乔治、威尔和特里)

如何找到逗号的最后一个实例并将其替换为单词“and”?一旦我找到了最后一个例子,我认为这是一个简单的问题,做一些类似的事情

string new=ori.Substring(0,start) + rep + ori.Substring(start+rep.Length);
想法?评论?建议

谢谢,
Bob

这应该能帮到你:

var foo = "Bob, George, Will, Terry";
if (foo.Contains(",")) {
    foo = foo.Substring(0, foo.LastIndexOf(",")) + " and" + foo.Substring(foo.LastIndexOf(",")+ 1);
}

您可以使用LINQ和
String.Join的组合。此解决方案不需要逗号的最后一个索引,而且阅读起来“更流畅”

var list=新列表{“鲍勃”、“乔治”、“威尔”、“特里”};
var listAsString=list.Count>1
? string.Join(“,”,list.Take(list.Count-1))+”和“+list.Last()
:list.First();

我不确定您想做什么,但以下代码有效:

string original = "(Bob, George, Will, Terry)";
            string result = "";
            string[] splited = original.Split(',');
            for (int i = 0; i < splited.Count(); i++)
            {
                if(i == splited.Count() - 2)
                {
                    result += splited[i] + " and";
                }
                else if(i == splited.Count() - 1)
                {
                    result += splited[i];
                }
                else
                {
                    result += splited[i] + ",";
                }
            }
string original=“(鲍勃、乔治、威尔、特里)”;
字符串结果=”;
string[]splited=original.Split(',');
对于(int i=0;i

我使用split将原始字符串拆分为一个向量,因此我使用这个向量将最后一个逗号替换为单词“and”。

这应该适合您。还添加了可选的逗号样式

var names = "Bob, George, Will, Terry";
var lastCommaPosition = names.LastIndexOf(',');
if (lastCommaPosition != -1) 
{
    names = names.Remove(lastCommaPosition, 1)
               //.Insert(lastComma, " and");
                 .Insert(lastCommaPosition, ", and");
}

Console.WriteLine(names);
你可以用Linq

list.Select(i => i).Aggregate((i, j) => i + (list.IndexOf(j) == list.Count -1 ? " and "  :  " , ") + j);

希望有帮助,

首先也是最重要的是,使用牛津逗号。您可以使用字符串函数
LastIndexOf
查找最后一个逗号的索引。我建议您阅读并创建一个。当您循环时,每个循环中的索引号都将增加1。如果当前索引号等于(数组列表大小-1),则它是最后一个元素。我的意思是循环中的当前索引比数组或列表的大小小1。希望你有个主意。我想知道为什么你首先要构建一个字符串,然后必须解析来修改它。为什么不在构建第一个字符串时正确构建第二个字符串?@adv12,当我构建原始字符串时,我不知道将有多少元素。在列表完成之前,您是否有确定列表中元素数量的建议?当我添加上面的行时,我得到以下错误。。。异常详细信息:System.ArgumentOutOfRangeException:长度不能小于零。参数名称:length字符串没有逗号时可能会出现这种情况。您需要检查逗号,否则
LastIndexOf
将返回-1。我更新了上面的示例。列表长度
1
@grek40看起来有点糟糕-你是对的;我已编辑代码以检查列表的长度。请继续检查长度
0
,否则调用
First()
将引发异常。谢谢,我也喜欢其他逗号样式。
list.Select(i => i).Aggregate((i, j) => i + (list.IndexOf(j) == list.Count -1 ? " and "  :  " , ") + j);