جافا: طباعة مجموعة 2D سلسلة كجدول بزر الماوس الأيمن مبرر
-
07-07-2019 - |
سؤال
ما هي <م> أفضل م> طريقة لطباعة خلايا مجموعة String[][]
كجدول بزر الماوس الأيمن له ما يبرره؟ على سبيل المثال، وإدخال
{ { "x", "xxx" }, { "yyy", "y" }, { "zz", "zz" } }
وينبغي أن تسفر إخراج
x xxx
yyy y
zz zz
وهذا يبدو وكأنه شيء واحد <م> يجب م> تكون قادرة على القيام بها باستخدام java.util.Formatter
، ولكن لا يبدو للسماح بعرض حقل غير ثابتة. إن أفضل إجابة استخدام بعض الطرق القياسية لحشوة خلايا الجدول، وليس الإدراج اليدوي من الشخصيات الفضاء.
المحلول
في الواقع، إذا قمت بتحديد عرض للحقول، ينبغي أن يكون بزر الماوس الأيمن يبرره.
إذا كنت بحاجة إلى الحشو الديناميكي، والحد الأدنى لأطول سلسلة، عليك أن تسير مجموعة، والحصول على عرض القصوى، وتوليد سلسلة التنسيق مع عرض حسابها من هذا ماكسيما، واستخدامه لتنسيق الإخراج.
نصائح أخرى
وهنا جوابا، وذلك باستخدام سلاسل التنسيق ديناميكيا لكل عمود:
public static void printTable(String[][] table) {
// Find out what the maximum number of columns is in any row
int maxColumns = 0;
for (int i = 0; i < table.length; i++) {
maxColumns = Math.max(table[i].length, maxColumns);
}
// Find the maximum length of a string in each column
int[] lengths = new int[maxColumns];
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
lengths[j] = Math.max(table[i][j].length(), lengths[j]);
}
}
// Generate a format string for each column
String[] formats = new String[lengths.length];
for (int i = 0; i < lengths.length; i++) {
formats[i] = "%1$" + lengths[i] + "s"
+ (i + 1 == lengths.length ? "\n" : " ");
}
// Print 'em out
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
System.out.printf(formats[j], table[i][j]);
}
}
}
والعثور على طول أطول سلسلة ..
غادر وسادة كل السلاسل مع مسافات حتى ص أن طول + 1
System.out.print لهم باستخدام 2 متداخلة لحلقات