在特定字符串位置插入字符串

时间:2012-07-04 06:07:14

标签: c# string text insert

我有一个像这样的文本文件(.txt)

  

对话:0,0:00:01.99,0:00:03.84,默认,0000,0000,0000 ,,你走了!

     

对话:0,0:00:03.84,0:00:06.31,默认,0000,0000,0000 ,,和,再次!

     

对话:0,0:01:42.92,0:01:44.91,默认值,0000,0000,0000 ,,等待一分钟。

我想像这样

将“{”和“}”插入到该文件中
  

对话:0,0:00:01.99,0:00:03.84,默认,0000,0000,0000 ,, {上你去!}

     

对话:0,0:00:03.84,0:00:06.31,默认,0000,0000,0000 ,, {又来!}

     

对话:0,0:01:42.92,0:01:44.91,默认,0000,0000,0000 ,, {等一下。}

我管理员使用这些代码将“}”插入到最后一个

            String path = openFileDialog1.FileName;
            List<string> line = new List<string>();
            StreamReader sr = new StreamReader(path);
            StringBuilder sb = new StringBuilder();
            String lines;

            while ((lines = sr.ReadLine()) != null)
            {
                line.Add(lines+"}");
            }

            foreach (string s in line)
            {
                sb.AppendLine(s);
            }

我想在“0000”之后插入“{”。对不起我的Eng,谢谢你的帮助。

5 个答案:

答案 0 :(得分:1)

        while ((lines = sr.ReadLine()) != null)
        {
           var index = line.LastIndesOf(",,") + 2;
           lines = lines.Insert(index, "{"); 

           line.Add(lines+"}");                
        }   

答案 1 :(得分:1)

假设您的格式在对话框之前包含9个逗号分隔的部分:

string InsertBrackets(string input)
{
    var idx = -1;
    for (int i = 0; i < 9; i++)
        idx = input.IndexOf(",", idx + 1);

    return input.Insert(idx + 1, "{") + "}";
}

如果您愿意,也可以将部分数作为参数传递,而不是硬编码为9。当然还要添加一些错误检查。

答案 2 :(得分:0)

好像是某种副标题。

在这种情况下,您只需计算遇到的,的数量。其余的是文字对话,你可以用{}包围。

我不是用C#编写的,但应该有一个函数允许你用正则表达式拆分String。只需使用它来分割逗号,,并指定分割数限制(在这种情况下,分隔符的数量为9)。然后用{}选择要包围的最后一个标记,然后重新加入字符串。

答案 3 :(得分:0)

以下是ideone中的一个工作示例。

简而言之,这是添加大括号的函数(此解决方案取决于您使用逗号分隔的相同数量的字段的事实,并且只有最后一个字段可能有逗号):

   public static string AddBraces(string u) {
            string[] words = u.Split(',');
            string res = words[0];
            words[9] = "{" + words[9];
            for (int i = 1; i < words.Length;++i) {
                    res = res + ',' + words[i];
            }
            res = res + "}";
            return res;
    }

答案 4 :(得分:0)

假设您在要更改的文本之前总是有两个逗号(从您的评论中可能就是这种情况),您可以尝试这样的事情:

        String str = "Dialogue: 0,0:00:01.99,0:00:03.84,Default,,0000,0000,0000,,Up you go!";
        String newStr = Regex.Replace(str, "(.*,,)(.*)$", "$1{$2}");
        System.Console.WriteLine(str);
        System.Console.WriteLine(newStr);
        System.Console.ReadKey();

这产生以下结果:

Dialogue: 0,0:00:01.99,0:00:03.84,Default,,0000,0000,0000,,Up you go!
Dialogue: 0,0:00:01.99,0:00:03.84,Default,,0000,0000,0000,,{Up you go!}

此正则表达式:(.*,,)(.*)$将匹配两个组。第一组将包含字符串的开头,直到最后两个逗号。第二组将包含最后两个逗号后面的文本,并保持匹配直到字符串结尾。

"$1{$2}"部分会将第一个匹配的组替换为给定的字符串,然后是{,然后是第二个匹配的组,然后是}。< / p>