如何在字母前的每个数字后添加换行符
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++;
}
我有一个这样的字符串:
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++;
}