string.contains和string.replace在一行代码中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了string.contains和string.replace在一行代码中相关的知识,希望对你有一定的参考价值。

我正在编写一些软件,我必须从外部文件加载很多列名。通常我会用一些JSON来做这件事,但出于用户友好的原因,我现在不能这样做。我需要使用一个对用户可读的文本文件,并包含很多注释。

所以我创建了自己的文件来保存所有这些值。

现在,当我在我的软件中导入这些值时,我基本上逐行遍历我的配置文件,如果它匹配我随后解析的参数,我会检查每一行。但是这样我最终得到了一个带有非常重复代码的大代码块,我想知道是不能以某种方式简化它,以便每一次检查都只需要一行。

这是我目前使用的代码:

if (line.Contains("[myValue]"))
{
   myParameter = line.Replace("[myValue]", string.Empty).Trim();                        
}

我知道使用Linq你可以简单地将它们放在一行中,我只是不确定它是否适用于这种情况?

谢谢你的帮助!肯尼斯

答案

如果这段代码经常重复,为什么不创建一个方法:

void SetParameter(string line, string name, ref string parameter)
{
    if (line.Contains(name))
    {
       parameter = line.Replace(name, string.Empty).Trim();                        
    }
}
SetParameter(line, "[myValue]", ref myParameter);

如果你想避免同时调用ReplaceContains,这可能是一个好主意,你也可以调用Replace

void SetParameter(string line, string name, ref string parameter)
{
    var replaced = line.Replace(name, string.Empty);
    if (line != replaced)
    {
       parameter = replaced.Trim();                        
    }
}
另一答案

试试这种方式(三元):

myParameter = line.Contains("[myValue]")?line.Replace("[myValue]", string.Empty).Trim():myParameter;

其实,

line.IndexOf应该更快。

从你的代码看,你看起来只是用空文本替换,所以为什么不采取整个字符串(由许多行组成)并一次替换,而不是一次检查一行。

另一答案

您可以使用RegEx。这可能会减轻一些重复的代码

        string line = "[myvalue1] some string [someotherstring] [myvalue2]";
        // All your Keys stored at a single place
        string[] keylist = new string[] {  @"[myvalue1]", @"[myvalue2]" };

        var newString = Regex.Replace(line, string.Join("|", keylist), string.Empty);

希望能帮助到你。

以上是关于string.contains和string.replace在一行代码中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中的 String.contains() 方法中使用正则表达式

String contains方法

C# (String.StartsWith && !String.EndsWith && !String.Contains) 使用列表

string.contains和string.replace在一行代码中

string.contains()

为啥 String.Contains 不直接调用最终重载?