User Tools

Site Tools


java:formatting

This is an old revision of the document!


Μορφοποίηση Εξόδου

Οι κλάσεις PrintStream και PrintWriter υλοποιούν ένα κοινό σύνολο μεθόδων για εγγραφή χαρακτήρων. Παρέχονται οι παρακάτω δύο δυνατότητες μορφοποίησης:

  1. Οι μέθοδοι print και println οι οποίες δέχονται μόνο ένα όρισμα είτε βασικού τύπου (int, long, double, byte etc), είτε αναφορικού τύπου (Object ή String)
  2. Η μέθοδος format μορφοποιεί με βάση ένα String μορφοποίησης ανάλογο με αυτό της printf στη γλώσσα C.

Οι print και println Μέθοδοι

Η κλήση των print ή println απαιτεί την εκτύπωση ενός αλφαριθμητικού. Εάν το όρισμα που λαμβάνουν οι μέθοδοι αυτές δεν είναι αλφαριθμητικό τότε

  • για αναφορικούς τύπους που δεν είναι String καλείται η μέθοδος toString(), προκειμένου να μετατραπούν τα ορίσματα σε String.
  • για βασικούς τύπους, αυτοί μετατρέπονται πρώτα σε αναφορικούς (int –> Integer, long –> Long) και στη συνέχεια καλείται η μέθοδος toString για αυτούς.

Η διαφορά μεταξύ των μεθόδων print και println είναι ότι η δεύτερη εκτυπώνει στο τέλος και ένα χαρακτήρα αλλαγής γραμμής.

Μπορείτε να δείτε το παρακάτω παράδειγμα:

Root.java
public class Root {
  public static void main(String[] args) {
    int i = 2;
    double r = Math.sqrt(i);
 
    System.out.print("The square root of ");
    System.out.print(i);
    System.out.print(" is ");
    System.out.print(r);
    System.out.println(".");
 
    i = 5;
    r = Math.sqrt(i);
    System.out.println("The square root of " + i + " is " + r + ".");
  }
}

Παρακάτω δίνεται το αποτέλεσμα της εκτέλεσης της κλάσης Root:

The square root of 2 is 1.4142135623730951.
The square root of 5 is 2.23606797749979.

Η μέθοδος format ή printf

Η μέθοδος format μορφοποιεί ένα string σε αναλογία με τη συνάρτηση printf στη γλώσσα C. Το ακόλουθο παράδειγμα SquareRoot μορφοποιεί δύο τιμές με μία μόνο κλήση της format:

SquareRoot.java
public class SquareRoot {
    public static void main(String[] args) {
        int i = 2;
        double r = Math.sqrt(i);
 
        System.out.format("The square root of %d is %f.%n", i, r);
    }
}

H έξοδος της κλάσης SquareRoot είναι: The square root of 2 is 1.414214.

Όλοι οι προσδιοριστές μορφοποίησης αρχίζουν με τον χαρακτήρα '%' και ακολουθούν 1 ή 2 χαρακτήρες που καθορίζουν το είδος της μορφοποιημένης εξόδου που παράγεται. Παρακάτω δίνονται μερικές από τις πιο συνήθεις μετατροπές:

  • το %d μορφοποιεί μια τιμή integer ως μια δεκαδική τιμή.
  • το %f μορφοποιεί μια floating point τιμή ως μια δεκαδική τιμή.
  • το %n εισάγει έναν platform-specific χαρακτήρα αλλαγής γραμμής.
  • το %x μορφοποιεί έναν integer ως μια δεκαεξαδική τιμή.
  • το %s μορφοποιεί ένα String.

Οι σημαντικότεροι προσδιοριστές μορφοποίησης δίνονται παρακάτω:

Ακολουθούν δύο παραδείγματα χρήσης των σημαντικότερων προσδιοριστών μορφοποίησης που παρουσιάστηκαν προηγούμενα.

MyFormat.java
public class MyFormat {
    public static void main(String[] args) {
        System.out.format("%f, %1$+020.10f %n", Math.PI);
    }
}
TestFormat.java
import java.util.Calendar;
import java.util.Locale;
 
public class TestFormat {
 
    public static void main(String[] args) {
      long n = 461012;
      System.out.format("%d%n", n);      //  -->  "461012"
      System.out.format("%08d%n", n);    //  -->  "00461012"
      System.out.format("%+8d%n", n);    //  -->  " +461012"
      System.out.format("%,8d%n", n);    // -->  " 461,012"
      System.out.format("%+,8d%n%n", n); //  -->  "+461,012"
 
      double pi = Math.PI;
 
      System.out.format("%f%n", pi);       // -->  "3.141593"
      System.out.format("%.3f%n", pi);     // -->  "3.142"
      System.out.format("%10.3f%n", pi);   // -->  "     3.142"
      System.out.format("%-10.3f%n", pi);  // -->  "3.142"
      System.out.format(Locale.FRANCE,
                        "%-10.4f%n%n", pi); // -->  "3,1416"
 
      Calendar c = Calendar.getInstance();
      System.out.format("%tB %te, %tY%n", c, c, c); // -->  "May 29, 2006"
 
      System.out.format("%tl:%tM %tp%n", c, c, c);  // -->  "2:34 am"
 
      System.out.format("%tD%n", c);    // -->  "05/29/06"
    }
}
java/formatting.1583788926.txt.gz · Last modified: 2020/03/09 21:22 by gthanos