Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改字符串的格式 编辑:_C#_String Formatting - Fatal编程技术网

C# 更改字符串的格式 编辑:

C# 更改字符串的格式 编辑:,c#,string-formatting,C#,String Formatting,因为你的回答,我想我问错了问题 并不是我的解决方案不起作用或者不是很干净。我很感兴趣的是,如果有一个通用的方法,你如何能找到一个字符串。就像可以使用int或其他数据类型一样 所以我找不到。但我希望有一个 这就是我想问的问题: C#是否提供了一种格式化字符串的方法,就像它对int或其他数据类型所做的那样? 我在找这样的东西: myString.Format(myFormat); "123456789012345678" string stringData = "123456789012345

因为你的回答,我想我问错了问题

并不是我的解决方案不起作用或者不是很干净。我很感兴趣的是,如果有一个通用的方法,你如何能找到一个字符串。就像可以使用int或其他数据类型一样

所以我找不到。但我希望有一个

这就是我想问的问题:

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#有这样的东西,顺便说一句,它是一种验证字符串的方法,而不是格式化字符串的方法。使用这种方法,您可以格式化和验证字符串。它已经完成了,所以即使是懒惰的你也可以使用它:)不,它不仅仅是验证。但是参考资料有点糟糕。您可以在以下位置更清楚地看到:。字母值是一样的。但我想我会在插入时使用我的变体。下一个必须理解或更改我的代码的人会很感激的。感谢您的努力,也许它可以帮助其他需要格式化和验证的人。