2009-12-14 26 views
7

Estoy leyendo el búfer en serie con el método readLine(). La cadena devuelta por readLine() tiene el formato "str1: str2". En un bucle while cuando uso readLine número() de veces para obtener una respuesta del comando de puerto serie consigo salida raro como esto:Cadenas de formato en java

String1 : string1 
SString11 : String2 
StringString2 : String23 
String4 : String5 

Pero necesito la salida formateada como a continuación

String1  : string1 
SString11  : String2 
StringString2 : String23 
String4  : String5 

I usó el método de división en cadena y obtuvo las dos cadenas separadas con delimitador como ':'. Pero ahora necesito agregar el String1 con espacios para alinear todos los dos puntos.

Lo siento si la explicación de mi problema es extraña. Pero si alguien entendió el problema, ¿podría sugerirme cómo hacerlo?

Respuesta

6

Tome un vistazo a System.out.printf

+1

Usé String.format() y funcionó. Pero otro problema está ahí. El problema es que estoy poniendo la cadena de salida en una instancia de JTextArea. Elegí la fuente como Arial. Cuando imprima como este String.format ("% - 30s:% 30s", temp [0], temp [1]); Se imprime como Nombre de la imagen: firmware básico de Linux Versión: 2.1.1.17 En las dos líneas anteriores "I" en la imagen de la palabra y "V" en la versión de la palabra tiene un ancho diferente en el área de texto. Entonces, aunque estoy usando una cadena de 30 caracteres, los dos puntos no se están alineando. ¿Hay alguna solución para esto? –

+0

eche un vistazo a java.awt.FontMetrics (tal vez ... ha pasado mucho tiempo desde que me interesó el ancho de un campo/área de texto :-) – TofuBeer

+1

Necesita usar una fuente como Courier, esto se conoce como una fuente 'monoespaciada' que significa que todos los caracteres tienen el mismo ancho. Esto significa, por supuesto, que si los caracteres se alinean en la cadena, también se alinearían en la salida. –

18

La forma más sencilla de lograr esto es utilizar System.out.format(). Esto le permite usar C printf especificadores de formato de estilo. Un ejemplo:

System.out.format("%-5s:%10s\n", "Name", "Nemo"); 
System.out.format("%-5s:%10d\n", "Age", 120); 

Esta es la salida:

Name :  Nemo 
Age :  120 

Véase también la documentación de la clase Formatter para aprender más sobre la sintaxis de cadena de formato.

+0

Gracias por la respuesta. ¿Puedo obtener la salida formateada almacenada en una cadena en lugar de enviarla a System.out stream? ¿Hay alguna API? –

+2

Puede usar String.format() de la misma manera que System.out.format() para obtener el resultado como una Cadena. – tangens

+0

+1 para vincular a java.util.Formatter que posiblemente sea más útil para el cartel de preguntas que el formato() o printf() de System.out, ya que puede formatear en flujos arbitrarios y no está claro en la publicación cuál es el destino del salida es. – charstar

4

System.out.format ("% 30s:% s", str1, str2);

Se imprimirá la primera cadena con un ancho fijo de 30 caracteres.

+0

¡Me gusta la justificación correcta del primer parámetro aquí! –