Java Tutorial/Development/Formatter Argument Index

Материал из Java эксперт
Перейти к: навигация, поиск

Argument indexes enable you to reuse an argument without having to specify it twice

import java.util.Formatter;
public class MainClass {
  public static void main(String args[]) {
    Formatter fmt = new Formatter();
    fmt.format("%d in hex is %1$x", 255);
    System.out.println(fmt);
  }
}



255 in hex is ff


Relative index enables you to reuse the argument matched by the preceding format specifier

Simply specify < for the argument index.



import java.util.Formatter;
public class MainClass {
  public static void main(String args[]) {
    Formatter fmt = new Formatter();
    fmt.format("%d in hex is %<x", 255);
    System.out.println(fmt);
  }
}



255 in hex is ff


Relative indexes are especially useful when creating custom time and date formats

Because of relative indexing, the argument cal need only be passed once, rather than three times.



import java.util.Calendar;
import java.util.Formatter;
public class MainClass {
  public static void main(String args[]) {
    Formatter fmt = new Formatter();
    Calendar cal = Calendar.getInstance();
    fmt.format("Today is day %te of %<tB, %<tY", cal);
    System.out.println(fmt);
  }
}



Today is day 1 of December, 2006


Using an Argument Index

Normally, format specifiers and arguments are matched in order, from left to right.

However, by using an argument index you can explicitly control which argument a format specifier matches.

An argument index immediately follows the % in a format specifier: n$, where n is the index of the desired argument, beginning with 1.



import java.util.Formatter;
public class MainClass {
  public static void main(String args[]) {
    Formatter fmt = new Formatter();
    fmt.format("%3$d %1$d %2$d", 10, 20, 30);
    System.out.println(fmt);
  }
}



30 10 20