Java相当于.NET的String.Format

在Java中是否有与.NET的String.Format等价的东西?

看看String.format和PrintStream.format方法。

两者都基于java.util.Formatter类 。

String.format例子:

 Calendar c = new GregorianCalendar(1995, MAY, 23); String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c); // -> s == "Duke's Birthday: May 23, 1995" 

System.out.format示例:

 // Writes a formatted string to System.out. System.out.format("Local time: %tT", Calendar.getInstance()); // -> "Local time: 13:34:18" 

这个10美分的答案是:

C#的

 String.Format("{0} -- {1} -- {2}", ob1, ob2, ob3) 

相当于Java的

 String.format("%1$s -- %2$s -- %3$s", ob1, ob2, ob3) 

请注意基于1的索引,“s”表示使用.toString()转换为string。 还有许多其他转换可用和格式选项:

http://download.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax

有使用.net表示法的MessageFormat.format()

您也可以简单地使用%s作为string,因为索引是一个可选参数。

 String name = "Jon"; int age = 26; String.format("%s is %s years old.", name, age); 

它不那么嘈杂。

请注意关于java文档中的%s

如果参数arg为null,那么结果是“null”。 如果arg实现了Formattable,则调用arg.formatTo。 否则,通过调用arg.toString()来获得结果。

Java中有一个String.format ,虽然它的语法和.NET有些不同。

这不是真正解决OP问题的答案,但是对于那些正在寻找一种将stringreplace为包含C#风格的“格式项目”的string的简单方法的人来说可能会有所帮助。

  /** * Method to "format" an array of objects as a single string, performing two possible kinds of * formatting: * * 1. If the first object in the array is a String, and depending on the number of objects in the * array, then a very simplified and simple-minded C#-style formatting is done. Format items * "{0}", "{1}", etc., are replaced by the corresponding following object, converted to string * (of course). These format items must be as shown, with no fancy formatting tags, and only * simple string substitution is done. * * 2. For the objects in the array that do not get processed by point 1 (perhaps all of them, * perhaps none) they are converted to String and concatenated together with " - " in between. * * @param objectsToFormat Number of objects in the array to process/format. * @param arrayOfObjects Objects to be formatted, or at least the first objectsToFormat of them. * @return Formatted string, as described above. */ public static String formatArrayOfObjects(int objectsToFormat, Object... arrayOfObjects) { // Make a preliminary pass to avoid problems with nulls for (int i = 0; i < objectsToFormat; i++) { if (arrayOfObjects[i] == null) { arrayOfObjects[i] = "null"; } } // If only one object, just return it as a string if (objectsToFormat == 1) { return arrayOfObjects[0].toString(); } int nextObject = 0; StringBuilder stringBuilder = new StringBuilder(); // If first object is a string it is necessary to (maybe) perform C#-style formatting if (arrayOfObjects[0] instanceof String) { String s = (String) arrayOfObjects[0]; while (nextObject < objectsToFormat) { String formatItem = "{" + nextObject + "}"; nextObject++; if (!s.contains(formatItem)) { break; } s = s.replace(formatItem, arrayOfObjects[nextObject].toString()); } stringBuilder.append(s); } // Remaining objects (maybe all of them, maybe none) are concatenated together with " - " for (; nextObject < objectsToFormat; nextObject++) { if (nextObject > 0) { stringBuilder.append(" - "); } stringBuilder.append(arrayOfObjects[nextObject].toString()); } return stringBuilder.toString(); } 

(如果您好奇,我将此代码作为Android Log方法的简单包装的一部分,以便更轻松地在单个日志消息中logging多件事情。)