我想知道是否有人可以提供帮助。我正在尝试更改以下格式的字符串:
goeirjew98rut34ktljre9t30t4j3der
输出如下:
geo_irje_w
98r_ut34_k
tlj_re9t_3
0t4_j3de_r
因此,在第三个和第七个字符后插入一个下划线,并在第八个字符后插入一个新行。
在做了一些阅读后,我认为最好的方法可能是通过正则表达式,如下面链接中的示例:
http://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx
但是我不知道如何根据我的需要修改它。任何有用的帮助都会非常感激。
由于
答案 0 :(得分:2)
这绝对是通过快速循环解决的问题:
string s = "goeirjew98rut34ktljre9t30t4j3der";
var outputs = new List<string>();
for (var i = 0; i < s.Length; i += 8)
{
string sub = s.Substring(i, Math.Min(8, s.Length - i));
if(sub.Length > 3)
sub = sub.Insert(3, "_");
if (sub.Length > 8)
sub = sub.Insert(8, "_");
outputs.Add(sub);
}
答案 1 :(得分:2)
可以通过正则表达式和替换来轻松解决,如下所示:
var s = "goeirjew98rut34ktljre9t30t4j3der";
Regex.Replace(s, @"(\w{3})(\w{4})(\w{1})", "$1_$2_$3\n").Dump();
答案 2 :(得分:0)
我认为您不能通过此规则在字符串中插入char,但我希望此代码对您有用。
public string Decode(string str)
{
var state = 0;
var c = 0;
var newStr = string.Empty;
foreach (var ch in str)
{
c++;
newStr += ch;
if (state == 0 && c == 3)
{
newStr += "_";
state = 1;
c = 0;
}
if (state == 1 && c == 4)
{
newStr += "_";
state = 2;
c = 0;
}
if (state == 2 && c == 1)
{
newStr += "\r\n";
state = 0;
c = 0;
}
}
return newStr;
}
答案 3 :(得分:0)
我会这样做,所以你可以动态改变一切并使用stringextentions
class Program
{
static void Main(string[] args)
{
string str = "goeirjew98rut34ktljre9t30t4j3der";
var parts = str.SplitInParts(8); //Split in different parts
foreach (var part in parts)
{
string formattedString = part.MultiInsert("_", 2, 6); //Insert your char on all position u want
Console.WriteLine(formattedString);
}
Console.ReadKey();
}
}
static class StringExtensions
{
public static IEnumerable<String> SplitInParts(this String s, Int32 partLength)
{
if (s == null)
throw new ArgumentNullException("s");
if (partLength <= 0)
throw new ArgumentException("Part length has to be positive.", "partLength");
for (var i = 0; i < s.Length; i += partLength)
yield return s.Substring(i, Math.Min(partLength, s.Length - i));
}
public static string MultiInsert(this string str, string insertChar, params int[] positions)
{
StringBuilder sb = new StringBuilder(str.Length + (positions.Length * insertChar.Length));
var posLookup = new HashSet<int>(positions);
for (int i = 0; i < str.Length; i++)
{
sb.Append(str[i]);
if (posLookup.Contains(i))
sb.Append(insertChar);
}
return sb.ToString();
}
}