我怎样才能在C#中编写这个java代码

时间:2013-04-05 22:30:57

标签: c# java arrays stringbuilder formatter

我有一个名为digits的整数数组

public String toDecimalString() {
        StringBuilder b = new StringBuilder(9 * digits.length);
        Formatter f = new Formatter(b);
        f.format("%d", digits[0]);
        for(int i = 1 ; i < digits.length; i++) {
            f.format("%09d", digits[i]);
        }
        return b.toString();
    }

我试过

String.Format("%09d", digits[i]);

但我认为我做错了什么

4 个答案:

答案 0 :(得分:5)

我对java格式化程序并不熟悉,但我认为这就是你想要的

var str = string.Format("{0:D9}", digits[i]);

甚至更好

var str = digits[i].ToString("D9");

要加入所有这些字符串,我建议:

var str = string.Join(string.Empty, digits.Select(d => d.ToString("D9")));

进一步阅读

答案 1 :(得分:2)

我想你想要像

这样的东西
StringBuilder sb = new StringBuilder();
sb.append(String.Format("DL", digits[i]));
for (int i = 1; i < digits.Length; i++) {    
    sb.append(String.Format("D9", digits[i]));
}

答案 2 :(得分:1)

复制从java代码并将其直接粘贴到c#代码中,然后更改(在toDecimalString()方法中):

  • f.format to f。 F ormat
  • digits.length到数字。 L ength
  • b.toString()到b。 T oString()

然后将此类粘贴到您的代码中:

public partial class Formatter: IFormatProvider, ICustomFormatter {
    public String Format(String format, object arg, IFormatProvider formatProvider=null) {
        if(!format.StartsWith("%")||!format.EndsWith("d"))
            throw new NotImplementedException();

        m_Builder.Append(String.Format("{0:D"+format.Substring(1, format.Length-2)+"}", arg));
        return m_Builder.ToString();
    }

    object IFormatProvider.GetFormat(Type formatType) {
        return typeof(ICustomFormatter)!=formatType?null:this;
    }

    public Formatter(StringBuilder b) {
        this.m_Builder=b;
    }

    StringBuilder m_Builder;
}

注意该类仅实施了最低要求作为您提出的问题,如果您进一步扩展要求,则需要添加代码。

答案 3 :(得分:0)

    public string toDecimalString()
{
    StringBuilder b = new StringBuilder(9 * digits.Length);
    var str = digits[0].ToString("D");
    b.Append(str);
    for (int i = 1; i < digits.Length; i++)
    {
        var str2 = digits[i].ToString("D9");
        b.Append(str2);
    }                
    return b.ToString();
}

感谢所有答案,我终于达成了上述解决方案