Reputation: 1302
I am having a string in java that i am printing and has title and amount for example below
Rice Ksh 150
Cooking Oil Ksh 200
Skinless White Meat Ksh 450
Honey Ksh 270
Cottage Cheese Ksh 539
What i would like to achieve when i print is something like this below
Rice Ksh 150
Cooking Oil Ksh 200
Skinless White Meat Ksh 450
Honey Ksh 270
Cottage Cheese Ksh 539
Below is what i have tried but its not working is there another function that i can use to make the output justified where title of the items is far left/start and amount is far right/end
for (Receipt receipt : receiptList) {
String output = "";
String itemAmount = String.format("%s %s %s", receipt.getItem(),
"Ksh", receipt.getAmount());
for (int i = 0; i < itemAmount.length(); i++){
char c = itemAmount.charAt(i);
if (c==' '){
output += " ";
}else {
output += "" + c;
}
}
// print output here
}
Upvotes: 0
Views: 843
Reputation: 1493
I would use System.out.printf
and specify the width of each column.
Example:
String[] item = {"Rice", "Cooking Oil", "Skinless White Meat", "Honey", "Cottage Cheese"};
int[] amount = {150,200,450,270,539};
for(int i=0; i<item.length; i++)
System.out.printf("%-20s%4s%4d\n", item[i],"Ksh", amount[i]);
Output:
Rice Ksh 150
Cooking Oil Ksh 200
Skinless White Meat Ksh 450
Honey Ksh 270
Cottage Cheese Ksh 539
Upvotes: 1
Reputation: 2018
List<Receipt> receiptList = asList(
new Receipt("Rice Ksh", 150),
new Receipt("Skinless White Meat Ksh", 150),
new Receipt("Cottage Cheese Ksh", 150));
int maxSize = 0;
for (Receipt receipt : receiptList) {
if(receipt.getItem().length()>maxSize)
maxSize = receipt.getItem().length();
}
for (Receipt receipt : receiptList) {
int spaces = maxSize+1 - receipt.item.length();
String s = String.format("%1$"+spaces+"s", "");
System.out.println(receipt.item.substring(0,receipt.item.length()-3) + s + " KSH " + receipt.amount );
}
OUTPUT:
Rice KSH 150
Skinless White Meat KSH 150
Cottage Cheese KSH 150
performance log(n).
Upvotes: 0