2015-04-16 19 views
10

Hizalanmış bir şekilde basılması gereken bir dizi İngilizce ve Arapça metinler var. ÖrneğinArapça karakterler soldan sağa yönde nasıl yazdırılır

:

List<Character> ar = new ArrayList<Character>(); 
ar.add('ا'); 
ar.add('ب'); 
ar.add('ت'); 

List<Character> en = new ArrayList<Character>(); 
en.add('a'); 
en.add('b'); 
en.add('c'); 

System.out.println("ArArray: " + ar); 
System.out.println("EnArray: " + en); 

Beklenen Çıktı:

ArArray: [ت, ب, ا] // <- I want characters to be printed in the order they were added to the list 
EnArray: [a, b, c] 

Gerçek Çıktı:

ArArray: [ا, ب, ت] // <- but they're printed in reverse order 
EnArray: [a, b, c] 

Arap karakterleri yazdırmak için bir yolu var mı soldan -doğru yön Çıkmadan önce listeyi açıkça tersine çevirmeden?

+1

, dizi kendi başına elemanlarını tersine gibi görünüyor. –

+1

@SashaSalauyou Lütfen gerçek ve beklenen çıktıları tekrar kontrol edin. Normalde soldan sağa İngilizce harflerle yazmayı planladım ama aslında çıktıda tersine çevrildi. – vanilla

+0

@GeorgeT evet tersine çevrildi ancak metin hizalanmış olarak gösterilmediğinden tersine çevrilmesini istemiyorum. – vanilla

cevap

10

Bunu LTR basılacak olmak için her RTL karakterden önce left-to-right mark '\u200e' eklemek gerekir: "Gerçek çıktı" kısmı yukarıda doğruysa

public String printListLtr(List<Character> sb) { 
    if (sb.size() == 0) 
     return "[]"; 
    StringBuilder b = new StringBuilder('['); 
    for (Character c : sb) { 
     b.append('\u200e').append(c).append(',').append(' '); 
    } 
    return b.substring(0, b.length() - 2) + "]"; 
} 
+0

System.out.println ("\ u200eArArray:" + ar) yazarsanız, kendi kendine yapılan bir döngü olmadan çalışır. AR'yi destekleyen bir terminalim yok, bu yüzden kendimi deneyemem. – Torben

+0

@Torben Tüm çıktıdan hemen önce eklemeye çalıştım ama işe yaramıyor. Sadece her arapça karakterden önce eklerken başarılı oldum. –

+0

@SashaSalauyou Harika! beklendiği gibi çalışır. çok teşekkürler – vanilla

İlgili konular