繁体   English   中英

Java 格式化字符串为 C#

[英]Java Format string to C#

不懂Java的语法。 如何将"%6d %7.1f %5.1f"转换为等效的 C#?

我一直在 C# 中打印出这个: %6d %7.1f %5.1f

试过:

"{0:d6} {7:1f} {5:1f}"

但是,遇到了异常。

例外:

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代码:

String.format("%6d %7.1f %5.1f", int, double, double/double);

很明显将根据可变数据类型生成什么值。

编辑:我刚刚看过, 将这行 Java 代码转换为 C# 代码

C#

String.Format("{0:x2}", arrayOfByte[i]);

Java

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

请。 请。 请。 不要关闭它。 亲切地。 请。

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

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

  • 最多 6 个字符的 integer,如果少于 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 个字符代表 integer
  • 7 = 浮点数的 7 个字符
  • 5 = 5 个浮点字符

:之后的字母和数字是格式说明符。

  • d = integer
  • f1 = 精度为 1 的浮动。

生成上面的字符串,如下所示:

  • {0,6:d} 将 605 变成“605”(3 个前导空格,因为 : 之前的 6)
  • {1,7:f1} 将 20.5 变成“20.5”(3 个前导空格,因为 : 之前的 7)
  • {2,5:f1} 将 8.22 变成“8.2”(1 个前导空格是由于 5 之前的:和 1 个小数是由于精度)。

正如我之前所说,查看String.FormatStandard Numeric Format Strings以获取更多信息。

从C#开始 6.可以使用插值 对于您的情况,您可能想尝试以下操作:

string formattedString = $"{0:d6} {7.1:f} {5.1:f}";

在 C# 6 之前您可以尝试以下操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM