Вы пытаетесь изменить формат, который требует изменения в строке.Используйте String.format с заданной шириной, которая добавит необходимые пробелы, чтобы выровнять вашу строку вправо или влево, как вам нужно:
static String align(String str, int width, boolean right){
String[] temp = str.split("\n");
String frmt = "";
if(right){
frmt = "%" + width + "s";
}
else{
frmt = "%-" + width + "s";
}
for(int i=0; i<temp.length; i++)
temp[i] = String.format(frmt, temp[i]);
return String.join("\n", temp);
}
public static void main(String[] args) {
String newString = "\nالفرع: الفرع الرئيسي\n" +
"***********************************\n" +
"التاريخ والوقت: 2019/01/0218:01\n" +
"نوع الحركة: مبيعات مضخات \n" +
"رقم الفاتورة: 14\n" +
"طريقة الدفع: نقد \n" +
"المضخة: م 1 ك 1\n" +
"\n" +
"\n" +
"نوع الوقود: بنزين 95\n" +
"الكمية: 2.830\n" +
"السعر: 1.060\n" +
"الإجمالي: 3.000\n" +
"\n" +
"***********************************\n" +
" شكرا لزيارتكم\n" +
" \n" +
" ";
System.out.println(align(newString, 35, false));
}
Ширина здесь установлена на 35, вы можете установить ее на что угоднонеобходимость.̶T̶h̶e̶ ̶ ̶-̶
̶ ̶w̶i̶l̶l̶ ̶a̶l̶i̶g̶n̶ ̶i̶t̶ ̶t̶o̶ ̶t̶h̶e̶ ̶r̶i̶g̶h̶t̶̶выравнивать ли вправо или влево, как это видно при изменении переменной frmt
.
Редактировать 2: знак -
выровняется по левому краю, если язык ltr, и по правому краю, если язык rtl.Арабский (как показано в вашем примере) - это rtl, и поэтому вам нужно выровнять его в противоположность тому, что есть в английском.Я обновил функцию с исправленным кодом.Для языков RTL (арабский) используйте align(string, width, false)
, а для языков LTR используйте align(string, with, true)