Java格式字符串到C#

Java格式字符串到C#,java,c#,Java,C#,不理解Java的语法。如何将:“%6d%7.1f%5.1f”转换为C#等效值 我一直在用C#:%6d%7.1f%5.1f 已尝试: "{0:d6} {7:1f} {5:1f}" String.format("%6d %7.1f %5.1f", int, double, double/double); 但是,遇到了一个例外 例外情况: Unhandled Exception: System.FormatException: Index (zero bas

不理解Java的语法。如何将:
“%6d%7.1f%5.1f”
转换为C#等效值

我一直在用C#:
%6d%7.1f%5.1f

已尝试:

"{0:d6} {7:1f} {5:1f}"
String.format("%6d %7.1f %5.1f", int, double, double/double);
但是,遇到了一个例外

例外情况:

Unhandled Exception: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
   at System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.Format(String format, Object arg0, Object arg1, Object arg2)
   at experiment.Main(String[] args)
Java代码:

"{0:d6} {7:1f} {5:1f}"
String.format("%6d %7.1f %5.1f", int, double, double/double);
很明显,将根据变量数据类型生成哪些值

编辑:我刚才看了

C#

Java

String.format("%02x", arrayOfByte[i]);

求你了。请请不要关上这个。好心的请。

注意:基于(希望)对Java格式说明符的更好理解,完全重写了我的原始答案

根据我(谷歌有限的理解),
%6d
%7.1f
%5.1f
对应以下内容:

string formattedString = $"{0:d6} {7.1:f} {5.1:f}";
string formattedString = String.Format("{0:d6} {1:f} {2:f}", 0, 7.1, 5.1);
  • 最多包含6个字符的整数,如果小于6,则填充
  • 最多7个字符(包括小数点和小数部分)的浮点,精度为1
  • 最多5个字符(包括小数点和小数部分)的浮点,精度为1
您可以使用C#的String.Format实现这一点,如下所示:

var newString = String.Format("{0,6:d} {1,7:f1}, {2,5:f1}", 605, 20.5, 8.22);
这将产生以下字符串:

"   605    20.5  8.22"
每个占位符组中的第一个数字(由
{
}
定义)对应于字符串后面传入的参数:

  • 0=605
  • 1=20.5
  • 2=8.22
后面的第二个数字是字符串的长度(包括小数点和小数部分)

  • 6=整数的6个字符
  • 7=浮点数的7个字符
  • 5=浮点数的5个字符
后面的字母和数字是格式说明符

  • d=整数
  • f1=精度为1的浮动
它生成上面的字符串,如下所示:

  • {0,6:d}将605变为“605”(3个前导空格,原因是:前面的6)
  • {1,7:f1}将20.5变为“20.5”(3个前导空格,因为:)
  • {2,5:f1}将8.22变为“8.2”(1个前导空格是由于:前面的5,1个小数是由于精度)
如前所述,请查看和以获取更多信息。

从C#6开始。你可以用。 对于您的情况,您可能希望尝试以下方法:

string formattedString = $"{0:d6} {7.1:f} {5.1:f}";
string formattedString = String.Format("{0:d6} {1:f} {2:f}", 0, 7.1, 5.1);
在C#6之前,您可以尝试以下方法:

string formattedString = $"{0:d6} {7.1:f} {5.1:f}";
string formattedString = String.Format("{0:d6} {1:f} {2:f}", 0, 7.1, 5.1);

另外,您的格式字符串有点不正确。“{”之后的第一个数字是占位符,从0开始。在“:”之后放置格式。错误告诉您格式字符串错误。您有三个“{}”,因此它应该是“{0:fromatstring}{1:formatstring}{2:format string}”“。在您发布的字符串中,第二个占位符以7开头,而您总共只有3个占位符。有关详细信息,请参阅和。例如,(不太熟悉Java),第一个占位符可能类似于{0:d},并带有string。Format将是string.Format(“{0:d}”,6)
请。请。请。不要关闭这个。
也许可以展示一个带有实际输入和实际输出的Java,这样我们就可以看到您在C#中试图实现什么?嗨,Tim,%6d%7.1f%5.1f我对Java不太了解,但我相信这只是Java格式化字符串的方式。它将6和格式作为十进制,7.1作为浮点,等等。上述代码段将返回“6 7.10 5.10”(因为我没有指出精度。Java中的输出是什么样子?@Tim
很明显,基于变量数据类型将生成哪些值。
是OP上次要求查看输出时所说的。@mjwills我对Java的字符串格式不太熟悉,不能肯定(现在已经过了我的就寝时间,所以可能我的大脑已经停止工作了。)虽然我已经知道了
%6d
与传入的整数长度有关,但是
双/double
这件事让我困惑不解。这就是为什么我编辑了我的答案,看看它是C#中String.Format的一个非常基本的介绍。欢迎!很乐意帮助:)这个答案没有考虑Java格式中的填充和精度。可能对OP很重要,也可能不重要。