如何在字母前面的每个数字后添加换行符

时间:2015-04-15 09:22:06

标签: c# string insert linefeed

我有一个这样的字符串:

String s ="6,44 6,35    +0,63asd    4,27fgh 4,14  45,6 +777,4cvbvc";

我想在每个数字和字母之间插入换行符,例如: +0,63(此处必须是换行符)asd 。我写了下面的代码,但它给出了长度改变的错误。也许可能是因为我的程序功能或c#的功能。但我需要坚持这些功能。所以你能在这些限制中推荐我一个解决方案吗?下面的代码无法解决它,我找不到任何其他方式。

int k = s.Length;
for (int i = 0; i < k; i++)
            if (char.IsDigit(s[i - 1]) && char.IsLetter(s[i]))
                s = s.Insert(i, Strings.Chr(10).ToString());

感谢您的帮助。欢呼声。

4 个答案:

答案 0 :(得分:0)

你的解决方案有一个错误 - 循环索引范围,你应该从1开始,因为你有表达式(i-1) 这是解决方案 https://dotnetfiddle.net/FMvpqj

答案 1 :(得分:0)

请尝试此代码

    String myString="";
    int k = s.Length;
    for (int i = 0; i < k; i++)
                if (char.IsDigit(s[i - 1]) && char.IsLetter(s[i]))
                    myString = myString + Strings.Chr(10).ToString() + s.Substring(i,k-i);
s=myString;

答案 2 :(得分:0)

您需要从1开始循环,否则您会收到异常,因为当i=0 s[i-1]变为s[-1]时。 现在你的程序应该可以运行,但我建议你使用stringbuilder,因为string.Insert每次调用它时都会创建一个新的字符串实例,如果输入字符串很长,你的程序会很慢。 此外,如果您在Windows环境中,换行符由&#34; \ r \ n&#34;表示。这是C#中的Environment.NewLine。 所以你的代码应该是这样的:

StringBuilder builder=new StringBuilder(s);
int offset=0;
for (int i = 1; i < s.Length; i++)
{
    if (char.IsDigit(s[i - 1]) && char.IsLetter(s[i]))
    {
        builder.Insert(i+offset, Environment.NewLine);
        //every time you add a line break you need to increment the offset
        offset+=Environment.NewLine.Length;
    }
}
s=builder.ToString();

答案 3 :(得分:0)

你可以这样做:

int k = s.Length;
int i= 1;
while (i < s.Length)
{
    if ((char.IsDigit(s[i - 1]) && char.IsLetter(s[i])) ||
        (char.IsLetter(s[i-1]) && char.IsDigit(s[i])))
    {
        s = s.Insert(i, ((char)10).ToString());
        i++;
    }
    i++;
}