2010-12-11 15 views
38

Me preguntaba si alguien me puede mostrar cómo usar el método de formato para cadenas de Java. Por ejemplo si quiero que el ancho de toda mi salida sea la mismaFormato de salida de Java para cadenas

Por ejemplo, supongamos que siempre quiero que mi salida sea la misma

Name =    Bob 
Age =    27 
Occupation =  Student 
Status =   Single 

En este ejemplo, todas las salidas son perfectamente formateados uno debajo del otro; ¿Cómo puedo lograr esto con el método de formato?

+2

¿Qué haces en realidad quiero sepa que [la documentación] (http://download.oracle.com/javase/6/docs/api/java/lang/String.formato html #) y [format string documentation] (http://download.oracle.com/javase/6/docs/api/java/util/Formatter.html#syntax) no te muestran? – birryree

+0

Cómo configuro el ancho, para que mis cadenas siempre salgan de acuerdo con ese ancho –

+1

usa el especificador de ancho, p. Ej. % 10s tiene un ancho de 10. –

Respuesta

5

EDITAR: Esta es una respuesta extremadamente primitiva pero no puedo borrarla porque fue aceptada. Consulte las respuestas a continuación para una mejor solución, aunque

¿Por qué no generar una cadena de espacios en blanco de forma dinámica para insertar en la declaración.

Así que si quieres que todos ellos comienzan en el carácter número 50 ...

String key = "Name ="; 
String space = ""; 
for(int i; i<(50-key.length); i++) 
{space = space + " ";} 
String value = "Bob\n"; 
System.out.println(key+space+value); 

Deja todo eso en un bucle e inicializar/set la "llave" y las variables "valor" antes de cada iteración y eres dorado También usaría la clase StringBuilder, que es más eficiente.

6

Si desea un mínimo de 4 caracteres, por ejemplo,

System.out.println(String.format("%4d", 5)); 
// Results in " 5", minimum of 4 characters 

Pero, en realidad, tiene que aprender a entender la documentación.

+1

en realidad no dan el resultado en "0005"? ya que es un argumento entero. Sin embargo, no estoy seguro si ese mismo argumento de "número de espacios" funciona para cadenas. (es decir, ¿el% 4s tiene un efecto similar?) No puedo decir que alguna vez me haya tenido que preocupar por mis cadenas mientras las escribo, pero uso ese argumento para los números todo el tiempo y estoy bastante seguro de que resulta en liderazgo. 0s siendo agregados. – gnomed

+2

¡No! % 4d formateará con tres espacios iniciales. Para obtener ceros a la izquierda, necesitarías% 04d. Acabo de probar esto en IdeOne: http://ideone.com/dzNQU –

+0

ah sí, tienes toda la razón, esa es la cadena de formato que utilicé. – gnomed

113
System.out.println(String.format("%-20s= %s" , "label", "content")); 
  • donde% s es un marcador de posición para usted cadena.
  • El '-' hace que el resultado esté justificado a la izquierda.
  • 20 es el ancho de la primera cadena

La salida tiene el siguiente aspecto:

label    = content 

Como referencia recomiendo Javadoc on formatter syntax

+13

También puede usar 'System.out.printf', es decir' System.out.printf ("% - 20s =% s", "etiqueta", "contenido"); ' –

+0

+1 para explicar por qué lo hace. .. – NazKazi

+1

+1 para justificación a la izquierda. :) – aandis

5

Para responder a su pregunta actualizada que puede hacer

String[] lines = ("Name =    Bob\n" + 
     "Age =    27\n" + 
     "Occupation =  Student\n" + 
     "Status =   Single").split("\n"); 

for (String line : lines) { 
    String[] parts = line.split(" = +"); 
    System.out.printf("%-19s %s%n", parts[0] + " =", parts[1]); 
} 

impresiones

Name =    Bob 
Age =    27 
Occupation =  Student 
Status =   Single 
0

Para valores decimales se puede utilizar DecimalFormat

import java.text.*; 

public class DecimalFormatDemo { 

    static public void customFormat(String pattern, double value) { 
     DecimalFormat myFormatter = new DecimalFormat(pattern); 
     String output = myFormatter.format(value); 
     System.out.println(value + " " + pattern + " " + output); 
    } 

    static public void main(String[] args) { 

     customFormat("###,###.###", 123456.789); 
     customFormat("###.##", 123456.789); 
     customFormat("000000.000", 123.78); 
     customFormat("$###,###.###", 12345.67); 
    } 
} 

y la salida será:

123456.789 ###,###.### 123,456.789 
123456.789 ###.##  123456.79 
123.78  000000.000 000123.780 
12345.67 $###,###.### $12,345.67 

Para más detalles mira aquí:

http://docs.oracle.com/javase/tutorial/java/data/numberformat.html

1
@Override 
public String toString() 
{ 
    return String.format("%15s /n %15d /n %15s /n %15s",name,age,Occupation,status); 
} 
+4

Bienvenido a Stack Overflow, Amol. En lugar de simplemente agregar un fragmento de código, ¿por qué no agrega una pequeña explicación de cómo funciona? –