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

How to add a line feed after each digit that came before a letter

我有一个这样的字符串:

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());

感谢您的帮助。干杯。

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

请试试这个代码

    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;

您需要从 1 开始循环,否则您将得到异常,因为当 i=0 s[i-1] 变为 s[-1] 时。 现在你的程序应该可以工作了,但我建议你使用 stringbuilder,因为 string.Insert 每次你调用它时都会创建一个新的字符串实例,如果输入字符串很长,你的程序就会非常慢。 此外,如果您处于 Windows 环境中,则换行符由“\r\n”表示,在 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();

你可以这样做:

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++;
}