C# 更改字符串的格式 编辑:
因为你的回答,我想我问错了问题 并不是我的解决方案不起作用或者不是很干净。我很感兴趣的是,如果有一个通用的方法,你如何能找到一个字符串。就像可以使用int或其他数据类型一样 所以我找不到。但我希望有一个 这就是我想问的问题:C# 更改字符串的格式 编辑:,c#,string-formatting,C#,String Formatting,因为你的回答,我想我问错了问题 并不是我的解决方案不起作用或者不是很干净。我很感兴趣的是,如果有一个通用的方法,你如何能找到一个字符串。就像可以使用int或其他数据类型一样 所以我找不到。但我希望有一个 这就是我想问的问题: C#是否提供了一种格式化字符串的方法,就像它对int或其他数据类型所做的那样? 我在找这样的东西: myString.Format(myFormat); "123456789012345678" string stringData = "123456789012345
C#是否提供了一种格式化字符串的方法,就像它对int或其他数据类型所做的那样? 我在找这样的东西:
myString.Format(myFormat);
"123456789012345678"
string stringData = "123456789012345678";
string dataInFormat = Convert.ToInt64(stringData).ToString(@"##\.##\.######\.########");
private string FormatString(string myString)
{
return Convert.ToInt64(myString).ToString(@"##\.##\.######\.########");
}
或:
如果答案是否定的,也可以。我只是想知道。(也许还有其他人)
原始问题:
更改字符串格式的最佳方法是什么? 我有一个字符串,看起来像这样:
myString.Format(myFormat);
"123456789012345678"
string stringData = "123456789012345678";
string dataInFormat = Convert.ToInt64(stringData).ToString(@"##\.##\.######\.########");
private string FormatString(string myString)
{
return Convert.ToInt64(myString).ToString(@"##\.##\.######\.########");
}
现在我想要:
"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);
}
<> p>我没有看到你的代码有任何错误,但是如果你想要一个更好的匹配系统,你可能需要考虑正则表达式:
(\d{2})(\d{2})(\d{6})(\d{8})
并将其替换为:
$1\.$2\.$3\.$4
()
但是我的两分钱:保持原样。如果你的字符串总是一个数字,那么你可以这样做:
myString.Format(myFormat);
"123456789012345678"
string stringData = "123456789012345678";
string dataInFormat = Convert.ToInt64(stringData).ToString(@"##\.##\.######\.########");
private string FormatString(string myString)
{
return Convert.ToInt64(myString).ToString(@"##\.##\.######\.########");
}
首先将字符串转换为long,然后在该字符串上实现格式。在您的情况下,它将是这样的:
myString.Format(myFormat);
"123456789012345678"
string stringData = "123456789012345678";
string dataInFormat = Convert.ToInt64(stringData).ToString(@"##\.##\.######\.########");
private string FormatString(string myString)
{
return Convert.ToInt64(myString).ToString(@"##\.##\.######\.########");
}
嗯……当框架不能提供您想要的东西时,您可以自己做 我把这个方法作为实验。它当然可以优化,也没有经过充分测试,但它可以让您了解您可以做什么:
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();
}
“我用的是这个,但我觉得它不是很干净:”我认为它很清楚,因为它很容易理解。我只是在打和他一样的东西。这对我来说是非常明确的事情。我会留着它!!保留你所拥有的。它真的很干净。我可能会颠倒
Insert
的顺序:myString.Insert(10,“.”)。Insert(4,“.”)。Insert(2,“.”
。这样,插入“
”的初始位置就更清楚了。。。按照您编写代码的方式,第二个Insert()
必须计算已插入的第一个“
如果可以的话,我将+2链接到regex101。。。。。为什么我从来没有提到过那个网站?这让我想起了一句话:有些人在遇到问题时,会想“我知道,我会使用正则表达式。”现在他们有两个问题。国家自然资源保护局局长;)笑吧,我知道你的意思!我喜欢把自己想象成正则表达式专家,但不会超过一天:)看:“我试过的东西”。我不喜欢这个解决方案,因为您将字符串转换为long,然后将long转换回字符串。预期框架是如此的好,而不是在后台这样做。我不这么认为。是的,这会管用,但你知道,我真的很懒…:)但是,如果我正确解释了您的答案,那么框架不支持字符串格式。那真是太悲哀了。在c#之前,我使用Pl/1,这里有这样一个:我几乎不记得Cobol也有类似的东西。我不认为C#有这样的东西,顺便说一句,它是一种验证字符串的方法,而不是格式化字符串的方法。使用这种方法,您可以格式化和验证字符串。它已经完成了,所以即使是懒惰的你也可以使用它:)不,它不仅仅是验证。但是参考资料有点糟糕。您可以在以下位置更清楚地看到:。字母值是一样的。但我想我会在插入时使用我的变体。下一个必须理解或更改我的代码的人会很感激的。感谢您的努力,也许它可以帮助其他需要格式化和验证的人。