2009-12-14 29 views
7

ReadLine() yöntemiyle seri arabelleği okuyorum. ReadLine() tarafından döndürülen dize, "str1: str2" biçimindedir.Dizeleri java'da biçimlendirme

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

Ama

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

I altında biçimlendirilmiş çıktı gerekir: while döngüsüne ben böyle tuhaf çıkış almak seri port komutunun bir yanıt kez readline() numarayı kullandığınızda split yöntemini string üzerinde kullandı ve iki dizeyi ':' ile ayırıcı ile ayırdı. Ama şimdi String1'i tüm kolonları hizalamak için boşluklarla eklemem gerekiyor.

Üzgünüm Sorunumu açıklamak garip. Ama eğer problemi anlayan biri, lütfen nasıl yapılacağını önerebilir misiniz?

cevap

6

bu System.out.format() kullanmaktır ulaşmak için en kolay yolu System.out.printf

+1

String.format() kullandım ve çalıştı. Ama başka bir sorun var. Sorun çıktı dizesini bir JTextArea örneğindeyim. Yazı tipini Arial olarak seçtim. Bu String.format gibi yazdırıldığında ("% - 30s:% 30s", temp [0], temp [1]); gibi yazdırılıyor Resim Adı: Temel Linux sabit yazılımı Sürüm: 2.1.1.17 Yukarıdaki iki satırda, Word Image'deki "I" ve Word sürümündeki "V" metin alanında farklı genişliğe sahiptir. Yani 30 karakter dizisi kullanıyorum bile, sütunlar hizalamıyor. Bunun için herhangi bir çözüm var mı? –

+0

java.awt.FontMetrics'e bir göz atın (belki ... bir metin alanının/alanın genişliğini önemsediğimden çok uzun bir zaman geçti :-) – TofuBeer

+1

Kurye gibi bir yazı tipi kullanmanız gerekir. Tüm karakterlerin eşit genişliğe sahip olduğu anlamına gelen 'tek aralıklı' bir yazı tipi. Bu, elbette karakterlerin dizgede hizalanması durumunda, aynı zamanda, çıkışa hizalanacağı anlamına gelir. –

18

bir göz atın. Bu, C printf stil biçimi belirteçleri kullanmanıza izin verir. Bir örnek:

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

çıktısı verir:

Name :  Nemo 
Age :  120 

Ayrıca biçim dizesi sözdizimi hakkında daha fazla bilgi edinmek için Formatter sınıf için belgelere bakın.

+0

Cevabınız için teşekkürler. Biçimlendirilmiş çıktıyı System.out akışına göndermek yerine bir dizede saklayabilir miyim? Herhangi bir API var mı? –

+2

String.format() öğesini System.out.format() ile aynı şekilde String olarak almak için kullanabilirsiniz. Soru posteri için olasılıkla daha yararlı olan java.util.Formatter öğesine bağlantı için – tangens

+0

+1, rastgele akışlara biçimlendirilebileceği için, System.out'un formatı() veya printf() 'dan daha faydalıdır. çıktı. – charstar

4

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

İlk dizeyi sabit bir genişlikte 30 karakterle basacak.

+0

Burada ilk parametrenin doğru doğrulamasını beğeniyorum! –