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# 如何使用String.Replace_C#_String_Replace - Fatal编程技术网

C# 如何使用String.Replace

C# 如何使用String.Replace,c#,string,replace,C#,String,Replace,快速问题: 我有一个字符串m_Author,m_Editor,但我在字符串中有一些奇怪的ID内容,因此如果我使用WriteLine,它将看起来像: "16,;卢卡·霍斯特勒' 我知道我可以做到以下几点: string author = m_Author.Replace("16;#", ""); string editor = m_Editor.Replace("16;#", ""); 在那之后我就知

快速问题:

我有一个字符串m_Author,m_Editor,但我在字符串中有一些奇怪的ID内容,因此如果我使用WriteLine,它将看起来像:

"16,;卢卡·霍斯特勒'

我知道我可以做到以下几点:

    string author = m_Author.Replace("16;#", "");
    string editor = m_Editor.Replace("16;#", "");
在那之后我就知道名字了, 但我想将来我会有其他人和其他身份证

所以问题是:我能告诉String.replaceand所有事情吗, 所以我也可以

"14,;卢卡·霍斯特勒'

"十五,;汉斯·梅尔


并将获得输出:Luca Hostettler,Hans Meier,无需手动将代码更改为m_Editor.Replace14;,m_Editor.Replace15

听起来您需要一个至少有一个数字的正则表达式,然后是分号和散列,并且在字符串的开头有一个锚点:

string author = Regex.Replace(m_Author, @"^\d+;#", "");
或者为了使其更易于重用:

private static readonly Regex IdentifierMatcher = new Regex(@"^\d+;#");
...
string author = IdentifierMatcher.Replace(m_Author, "");
string editor = IdentifierMatcher.Repalce(m_Editor, "");
请注意,在以下情况下,可能会有不同的适当解决方案:

ID可以是非数字的 可能还有其他可忽略的部分,您只需要最后一个散列之后的值
听起来您需要一个至少有一个数字的正则表达式,然后是分号和散列,并且在字符串的开头有一个锚点:

string author = Regex.Replace(m_Author, @"^\d+;#", "");
或者为了使其更易于重用:

private static readonly Regex IdentifierMatcher = new Regex(@"^\d+;#");
...
string author = IdentifierMatcher.Replace(m_Author, "");
string editor = IdentifierMatcher.Repalce(m_Editor, "");
请注意,在以下情况下,可能会有不同的适当解决方案:

ID可以是非数字的 可能还有其他可忽略的部分,您只需要最后一个散列之后的值
您可以使用正则表达式或我更喜欢的IndexOf+子字符串:


您可以使用正则表达式或我更喜欢的IndexOf+子字符串:

使用String.Format

    int number=5;
    string userId = String.Format("{0};#",number)
    string author = m_Author.Replace(userId, "");
使用String.Format

    int number=5;
    string userId = String.Format("{0};#",number)
    string author = m_Author.Replace(userId, "");
或者只是

var author = m_Author.Split('#').Last();
或者只是

var author = m_Author.Split('#').Last();

您可以使用string拆分字符串。拆分函数将为您提供两个字符串,第一个是前面的所有内容,第二个是后面的所有内容

您可以使用string拆分字符串。拆分函数将为您提供两个字符串,第一个是前面的所有内容,第二个是后面的所有内容

如果您只想过滤掉所有不是字母或空格的内容,请尝试:

var originalName = "#123;Firstname Lastname";
var filteredName = new string(originalName
                                 .Where(c => Char.IsLetter(c) || 
                                             Char.IsWhiteSpace(c))
                                 .ToArray());

该示例将生成Firstname Lastname

如果您只想过滤掉所有不是字母或空格的内容,请尝试:

var originalName = "#123;Firstname Lastname";
var filteredName = new string(originalName
                                 .Where(c => Char.IsLetter(c) || 
                                             Char.IsWhiteSpace(c))
                                 .ToArray());


该示例将生成Firstname Lastname

可能锚定到字符串的开头?@JoeWhite:Yup,正在修复该问题并添加另一个示例:嗨@Jon,是的,你是对的,这正是我搜索的方法,已经过测试,它立即起作用:可能锚定到字符串的开头?@JoeWhite:Yup,我只是修复了这个问题,并添加了另一个例子:Hi@Jon,是的,你是对的,这正是我搜索的方法,已经过测试,它马上就工作了:注意,这也将取代Don'tReplaceThisfoo的开始。我猜这取决于是否总是有一个ID。@JonSkeet:据我所知,OP只想要哈希后的部分。它总是在那里^^^那么,如果你有更多的代码@TimSchmelter,为什么你更喜欢它呢?我们知道如果哈希前有一个ID,但我们不知道有时字符串的开头是否没有ID,但仍然有一个哈希。当然,这完全有可能奏效。也可以简化为字符串author=m_author.substring m_author.IndexOf+1;因为如果没有散列,它仍然会给出整个字符串。我相信它经过了适当的优化。@Unlockdluca:因为它更可读、更高效。但是正如Jon提到的,如果一行代码总是存在的话,可以使用它:m_Author.substring m_Author.IndexOf+1。我只是想展示IndexOf返回值的正确用法。注意,这也将替换Don'tReplaceThisfoo的开头。我猜这取决于是否总是有一个ID。@JonSkeet:据我所知,OP只想要哈希后的部分。它总是在那里^^^那么,如果你有更多的代码@TimSchmelter,为什么你更喜欢它呢?我们知道如果哈希前有一个ID,但我们不知道有时字符串的开头是否没有ID,但仍然有一个哈希。当然,这完全有可能奏效。也可以简化为字符串author=m_author.substring m_author.IndexOf+1;因为如果没有散列,它仍然会给出整个字符串。我相信它经过了适当的优化。@Unlockdluca:因为它更可读、更高效。但是正如Jon提到的,如果一行代码总是存在的话,可以使用它:m_Author.substring m_Author.IndexOf+1。我只是想展示IndexOf返回值的正确用法。这假设您知道数字是什么-在这种情况下,只使用串联会更容易:m_Author.Replacenumber+;,哦,是的,然后使用regexas其他答案,假设您知道数字是什么-在这种情况下,只使用串联会更容易:m_Author.Replacenumber+;,哦,是的,然后使用regexas其他答案说这假设字符串中没有其他哈希。14岁怎么样;其他东西?我想只有船尾的部分
呃,最后一个是必须的。是的,我是说我在问题中没有看到任何东西来证明这个假设。当然,它可能是有效的。很难说。虽然在这种情况下,我可能会使用LastIndexOf和Substring。这个问题是不明确的,我同意正则表达式在一般情况下更有效,可能更快。这假设字符串中没有其他哈希。14岁怎么样;其他东西?我假设只需要最后一个后面的部分。是的,我的意思是我在问题中没有看到任何东西可以证明这个假设。当然,它可能是有效的。很难说。虽然在这种情况下,我可能会使用LastIndexOf和Substring。这个问题是不明确的,我同意正则表达式在一般情况下更有效,并且可能更快。是否总是有1并且只有1?不,因为如果有更多用户,它将上升到20+;但是永远都会有,永远只有1吗?不,因为如果你有更多的用户,它会上升到20+;但世界将永远在那里