由于您的回答,我认为我提出的问题是错误的。
这不是我的解决方案不起作用或不是很干净。我很感兴趣,如果有一般的方法,你怎么能打破一个字符串。就像你可以使用int或其他数据类型一样。
所以我找不到一个。但我希望有一个。
这就是我想问的问题:
我正在寻找类似的东西:
myString.Format(myFormat);
或:
myFormattedString = String.Format(myString, myFormat);
如果答案是否定的,那也没关系。我只是想知道它。 (也许还有其他人)
原始问题:
所以我有一个看起来像这样的字符串:
"123456789012345678"
现在我想要那个:
"12.34.567890.12345678"
我正在使用它,但我发现它不是很干净:
private string FormatString(string myString)
{
return myString.Insert(2, ".").Insert(5, ".").Insert(12, ".");
}
我尝试过的事情:
// Too long.
private string FormatString(string myString)
{
return myString.Substring(0, 2)
+ "."
+ myString.Substring(2, 2)
+ "."
+ myString.Substring(4, 6)
+ "."
+ myString.Substring(10, 8);
}
// Convertion from string -> long -> string.
private string FormatString(string myString)
{
return String.Format("{0:##'.'##'.'######'.'########}", long.Parse(myString));
}
我正在寻找类似的东西:
private string FormatString(string myString)
{
return String.Format("{0:##'.'##'.'######'.'########}", myString);
}
答案 0 :(得分:4)
我没有看到您的代码有任何问题,但如果您想要更好的匹配系统,您可能需要考虑正则表达式:
(\d{2})(\d{2})(\d{6})(\d{8})
并将其替换为:
$1\.$2\.$3\.$4
但我的两分钱:保持原状。
答案 1 :(得分:1)
嗯......当框架没有提供你想要的东西时,你总是可以自己做。
我已将此方法作为实验。它肯定可以优化并且没有经过全面测试,但它可以让您了解自己可以做些什么:
private string FormatString(string myString,string format)
{
const char number = '#';
const char character = '%';
StringBuilder sb = new StringBuilder();
if (format.Length < myString.Length) throw new Exception("Invalid format string");
int i = 0;
foreach (char c in format)
{
switch (c)
{
case number:
if (char.IsDigit(myString[i]))
{
sb.Append(myString[i]);
i++;
}
else
{
throw new Exception("Format string doesn't match input string");
}
break;
case character:
if (!char.IsDigit(myString[i]))
{
sb.Append(myString[i]);
i++;
}
else
{
throw new Exception("Format string doesn't match input string");
}
break;
default:
sb.Append(c);
break;
}
}
return sb.ToString();
}
此方法要求格式字符串具有#
来表示数字,%
来表示字符,或任何其他字符将按字面复制到格式化字符串。
用法:
string test = FormatString("123456789012345678", "##.##.######.########");
//outputs 12.34.567890.12345678
string test = FormatString("12345F789012345678", "##.##.#%####.########");
//outputs 12.34.5F7890.12345678
答案 2 :(得分:0)
如果您的字符串始终是一个数字,那么您可以这样做:
string stringData = "123456789012345678";
string dataInFormat = Convert.ToInt64(stringData).ToString(@"##\.##\.######\.########");
首先将字符串转换为long,然后在其上实现格式。在你的情况下,它将是这样的:
private string FormatString(string myString)
{
return Convert.ToInt64(myString).ToString(@"##\.##\.######\.########");
}