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()を使用して文字列に変換することを意味します。利用可能な他の多くの変換とフォーマットオプションがあります:
http://download.Oracle.com/javase/1.5.0/docs/api/Java/util/Formatter.html#syntax
.net表記を使用するMessageFormat.format()
があります。
インデックスはオプションの引数であるため、文字列に%s
を使用することもできます。
String name = "Jon";
int age = 26;
String.format("%s is %s years old.", name, age);
ノイズが少ない。
Javaドキュメントからの%s
に関する注意:
引数argがヌルの場合、結果は「ヌル」です。 argがFormattableを実装する場合、arg.formatToが呼び出されます。それ以外の場合、結果はarg.toString()を呼び出すことによって取得されます。
String.format
Javaでは。ただし、構文は.NETとは少し異なります。
これは、実際にはOPの質問に対する答えではありませんが、C#スタイルの「書式項目」を含む文字列への文字列の置換を実行する簡単な方法を探している他の人にとっては役立つかもしれません。
/**
* 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メソッドの単純なラッパーの一部として使用して、単一のログメッセージに複数のことを簡単に記録できるようにします。 )