C# 字符串格式

C# 字符串格式,c#,string,string-formatting,C#,String,String Formatting,我可以编写一个应用程序,将字符串(由数字组成)的长度从8-12个字符转换为8-12个字符(参见下面的示例) 1404336133 4174728823 0587035281 基本上,我想将上面的字符串暂时转换为特定格式(存储在配置文件中),如下所示 <add key="Consumer_Code_Format_For_Code_Length_Eight" value="#### ####"/> <add key="Consumer_Code_Format_For_Code_

我可以编写一个应用程序,将字符串(由数字组成)的长度从8-12个字符转换为8-12个字符(参见下面的示例)

  • 1404336133
  • 4174728823
  • 0587035281
基本上,我想将上面的字符串暂时转换为特定格式(存储在配置文件中),如下所示

<add key="Consumer_Code_Format_For_Code_Length_Eight" value="#### ####"/>
<add key="Consumer_Code_Format_For_Code_Length_Nine" value="### ### ###"/>
<add key="Consumer_Code_Format_For_Code_Length_Ten" value="### #### ###"/>
<add key="Consumer_Code_Format_For_Code_Length_Eleven" value="#### ### ###"/>
<add key="Consumer_Code_Format_For_Code_Length_Twelve" value="#### #### ####"/>
但是,对于代码0587035281,它显示“58 7035 281”,因此删除了我需要的前导零

有没有办法阻止这种情况,我的代码是否有任何错误或可疑之处


期待您的回复

Double
值实际上存储为数字,因此在使用
Double.Parse()时,前导零会自动删除

若要再次添加前导零,您可以执行类似的操作(未测试,从我的头顶开始书写)。记住原始长度,然后比较结果,并根据需要添加尽可能多的前导零

public static string FormatCode(string code)
{
    int originalLength = code.Length;

    switch (originalLength)
    {
        case 8:
            string codeFormat = ...;
            code = ...;
            break;
        case 9:
            codeFormat = ...;
            code = ...;
            break;
        // ...

    while (code.Length < originalLength) {
        code = "0" + code;
    }

    return code;
}
公共静态字符串格式代码(字符串代码)
{
int originalLength=代码长度;
开关(初始长度)
{
案例8:
字符串代码格式=。。。;
代码=。。。;
打破
案例9:
代码格式=。。。;
代码=。。。;
打破
// ...
while(代码长度<原始长度){
code=“0”+代码;
}
返回码;
}
公共静态字符串格式代码(字符串代码)
{
开关(code.Length.ToString())
{
案例“8”:
string codeFormat=ConfigurationManager.AppSettings[“消费者代码格式用于代码长度八”];
打破
案例“9”:
codeFormat=ConfigurationManager.AppSettings[“消费者代码格式用于代码长度”];
打破
案例“10”:
codeFormat=ConfigurationManager.AppSettings[“消费者代码格式用于代码长度”];
打破
案例“11”:
codeFormat=ConfigurationManager.AppSettings[“消费者代码格式用于代码长度”];
打破
案例“12”:
codeFormat=ConfigurationManager.AppSettings[“消费者代码格式用于代码长度”];
打破
违约:
codeFormat=ConfigurationManager.AppSettings[“消费者代码格式用于代码长度八”];
打破
}
char[]结果=新字符[codeformat.Length];
int=0;
对于(i=0;i
没有很好的内联解决方案,你必须自己处理。因为这不是你要处理的数字,可能你需要一些非数字文字,最好每N个字符插入一个空格。这是这样的:

int chunkSize = 3;
string a = "0123456789";
int len = a.Length;
StringBuilder sb = new StringBuilder(len + len / chunkSize);
int firstIdx = len % chunkSize;
sb.Append(a.Substring(0, firstIdx));
sb.Append(" ");
for (int i = firstIdx; i < len; i += chunkSize)
{
    sb.Append(a.Substring(i, chunkSize));
    sb.Append(" ");
}
a = sb.ToString();
int chunkSize=3;
字符串a=“0123456789”;
int len=a.长度;
StringBuilder sb=新StringBuilder(len+len/chunkSize);
int firstIdx=len%chunkSize;
sb.Append(a.Substring(0,firstIdx));
某人加上(“”);
for(int i=firstIdx;i
这是有道理的,那么Dennis,你建议如何格式化代码呢?老实说,我不确定这是否是最好的解决方案,我想我可能需要更改web.config存储的内容,从而更改我的FormatCode方法。这正是我想到的。如果我没有花时间研究最好的解决方案,我很抱歉帮不了什么忙。@oded我认为你使用
0
而不是
是正确的
public static string FormatCode(string code)
{
    switch (code.Length.ToString())
    {
        case "8":
            string codeFormat = ConfigurationManager.AppSettings["Consumer_Code_Format_For_Code_Length_Eight"];
            break;

        case "9":
            codeFormat = ConfigurationManager.AppSettings["Consumer_Code_Format_For_Code_Length_Nine"];
            break;

        case "10":
            codeFormat = ConfigurationManager.AppSettings["Consumer_Code_Format_For_Code_Length_Ten"];
            break;

        case "11":
            codeFormat = ConfigurationManager.AppSettings["Consumer_Code_Format_For_Code_Length_Eleven"];
            break;

        case "12":
            codeFormat = ConfigurationManager.AppSettings["Consumer_Code_Format_For_Code_Length_Twelve"];
            break;

        default:
            codeFormat = ConfigurationManager.AppSettings["Consumer_Code_Format_For_Code_Length_Eight"];
            break;
    }

    char[] result = new char[codeformat.Length];

    int used = 0;
    for(i = 0; i < codeformat.Length; i++)
    {
        if (codeformat[i] == '#')
        {
            result[i] = code[used];
            used++;
        }
        else
            result[i] = codeformat[i];
    }
    // Finally return the newly formatted code
    return new string(result);
}
int chunkSize = 3;
string a = "0123456789";
int len = a.Length;
StringBuilder sb = new StringBuilder(len + len / chunkSize);
int firstIdx = len % chunkSize;
sb.Append(a.Substring(0, firstIdx));
sb.Append(" ");
for (int i = firstIdx; i < len; i += chunkSize)
{
    sb.Append(a.Substring(i, chunkSize));
    sb.Append(" ");
}
a = sb.ToString();