如何替换仅在符号前的字符串

时间:2019-10-28 21:43:01

标签: c#

使用记事本应用程序进行练习,我有一个文本文件,其中包含按行号排列的记事本,如下所示:

  

1)第一音符

     

2)第二音符

     

n)n个笔记

预期用户可以从列表中删除笔记,所以我想避免这些笔记不组织,因此行号将自动重新组织。

int NumérotationFromTheUserTextFile, NumérotationInOrder = 1;
string[] Strings = File.ReadAllLines(logPath);
for(int i=0; i<Strings.Length; i++)
{
    using (TextReader reader = File.OpenText(logPath))
    {
        string text = File.ReadLines(logPath).Skip(i).Take(1).First();
        string[] bits = text.Split(')');
        if(int.TryParse(bits[0], out int x)) 
        {
            NumérotationFromTheUserTextFile = x;
            if (NumérotationFromTheUserTextFile != NumérotationInOrder)
            {
                Strings[i] = Strings[i].Replace(NumérotationFromTheUserTextFile.ToString(CultureInfo.InvariantCulture), NumérotationInOrder.ToString(CultureInfo.InvariantCulture));
            }
            NumérotationInOrder++;
        }
    }
}    
File.WriteAllLines(logPath, Strings);

上面的代码完成了这项工作,除了它确实影响/更改了同一行上的所有其他相似数字。我希望它停止在每个行上都用这个符号')'进行编辑。

任何有关如何改进它的建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的那样,将行号与行本身存储在一起似乎是设计缺陷。您可以在运行时确定加载注释时确定的事情,并且可以在用户界面中显示它们而无需将其写入文件。显然,用户可以在应用程序外部修改文件,因此关于每一行内容的“规则”越少越好。

但是,如果您需要在每一行的开头存储snapshot.forEach(function(childSnapshot) { var item = childSnapshot.val(); item.key = childSnapshot.key; this.addresse.push(item); }); ,那么我们需要验证以下几点:

  1. 如果该行不包含'#)字符,请在该行的开头添加')'
  2. 如果行不是以数字文本开头,请在行首添加#)
  3. 如果#)字符前面的数字不正确,请对其进行修改。

这里是一种方法:

')'