【问题标题】:How to add suffix at each line of large string如何在大字符串的每一行添加后缀
【发布时间】:2019-03-20 19:12:10
【问题描述】:

我已经编写了一个代码来在多行字符串的每一行末尾添加后缀,但代码只附加在字符串的末尾。我是初学者。有人可以帮助我澄清我错在哪里吗?这是我的代码:

protected void Prefix_Suffix_Btn_Click(object sender, EventArgs e)
{
    String txt_input = Input_id.InnerText.ToString().Trim();
    String txt_suffix = Suffix_id.InnerText.ToString().Trim();
    String txt_output = Output_id.InnerText.ToString().Trim();

    txt_input = txt_input.Replace(txt_suffix + "\n", "\n");
    txt_input = txt_input + txt_suffix;
    Output_id.InnerText = txt_input;
}

输入:

1号线

第2行

第 3 行

期望的输出:

Line1AppededText

Line2AppendedText

Line3AppendedText

【问题讨论】:

  • 您刚刚在“替换”功能中混入了参数 - 检查docs。您要替换的东西放在第一位,然后您将要更改的内容放在第二位。请改用txt_input = txt_input.Replace("\n", txt_suffix + "\n");。演示(没有语法错误):dotnetfiddle.net/jnzgUy
  • 这里的后缀是什么? txt_inputtxt_suffix 中的值是什么?
  • 我认为您的意思是“前缀”而不是“后缀”。试试txt_input = txt_suffix + txt_input;
  • 值绑定到 html 的文本区域
  • 查看我上面第一条评论的更新,这是一个简单的错误

标签: c# string


【解决方案1】:

让我们将Split 文本添加到行中,将每个line 和最后Join 附加到string 后面:

  string source = string.Join(Environment.NewLine, 
    "Line1",
    "Line2", 
    "Line3");

  // Let's have a look at the initial string; 
  Console.WriteLine(source);
  Console.WriteLine();

  string result = string.Join(Environment.NewLine, source
    .Split(new string[] { Environment.NewLine }, StringSplitOptions.None)
    .Select(line => line + "AppendedText"));

  Console.Write(result);

结果:

Line1
Line2
Line3

Line1AppendedText
Line2AppendedText
Line3AppendedText

【讨论】:

    【解决方案2】:

    来自Input_id.InnerText 的字符串是由多行组成的字符串。因此,如果您想附加到每一行,则需要考虑一种方法来分别处理这些行。

    行尾表示为字符'\n'。对您来说,它看起来像 2 个字符,但引擎会将其视为一个字符:行尾。

    您可以做的就是将这个字符串拆分(分解)为多个字符串,方法是在您找到“\n”时捕捉该字符串。您可以通过以下方式做到这一点:

    var lines = Input_id.InnerText.ToString().Split('\n');
    

    现在lines 包含一个字符串数组,其中的每个项目都包含一行输入。

    现在您可以创建一个新字符串,该字符串将由您的拆分数组构建,如下所示:

    var newString = "";
    foreach(var line in lines) {
        newString += line + "<appendText>\n"; //note how we add the \n again since those disappeared by splitting
    }
    

    现在newString 将包含新字符串,每一行都包含附加文本。

    一种更简短的答案是例如使用这样的替换功能:

    var newString = Input_id.InnerText.ToString().Replace("\n", "<AppendedText>\n");
    

    有很多方法可以做你想做的事。

    【讨论】:

      【解决方案3】:

      您在将值传递给Replace() 方法时犯了一个错误。 String.Replace()documentation 是这样定义的:

      公共字符串替换(字符串oldValue,字符串newValue);

      第一个参数(“oldValue”)应该是你想要替换的东西。第二个参数(“newValue”)应该是你想要改变它的东西。你只是把它们弄错了。您要求它用旧文本(只是换行符)替换新文本(后缀和换行符),显然它不能这样做,因为字符串中尚不存在后缀文本 - 它不会即使有效,也要合乎逻辑。

      改变

      txt_input = txt_input.Replace(txt_suffix + "\n", "\n");
      

      txt_input = txt_input.Replace("\n", txt_suffix + "\n");
      

      你应该没事。正如其他答案所暗示的那样,可能有更好的方法来实现相同的输出,但就修复原始代码而言,这就是您需要做的所有事情。

      这是一个现场演示(仅使用控制台输出而不是 HTML 元素):https://dotnetfiddle.net/jnzgUy

      【讨论】:

      • 感谢您的宝贵时间,但它会在每一行添加后缀,而不是在每行末尾追加。
      • 不,它没有 - 看看演示。这是假设您的输入数据实际上是我假设的格式。如果数据看起来不是这样(就换行符出现的位置而言),那么您可能会遇到问题。
      猜你喜欢
      • 2011-01-07
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 2011-09-12
      • 2011-02-21
      相关资源
      最近更新 更多