格式化数组以Tabular格式在TextField中附加文本

时间:2015-11-29 00:45:05

标签: java javafx string.format

我在List Array中存储了多个字符串,然后将它们输出到JavaFX场景中的textArea。这就是我希望我的输出看起来像什么。注意我的字符串是否均匀分布,无论字符数是多少。

acdd abc  abcd  abcd 
ab   abcd abcdf abcd 

要输出我的列表,我将它通过for循环并在每行附加“\ n”。

for (String line : lines) {
      sb.append(line).append("\n");
     }

现在,如果我通过println打印newStr,它看起来很完美。

System.out.println(listStringJoin(newStr));
acdd abc  abcd  abcd 
ab   abcd abcdf abcd 

但是,我的问题是当我将newStr添加或添加到JavaFX场景中的textArea时。 myTextArea.appendText(listStringJoin(newStr));

结果,无间距输出。

acdd  abc  abcd abcd 
ab   abcd abcdf  abcd 

1 个答案:

答案 0 :(得分:1)

我首先得到数组中最大的元素,然后将空格添加到其他较小的元素。

这是一种从字符串数组生成表格格式的方法:

public static String[] generateTable(ArrayList<String> lines){
// A list to store every single element individually
ArrayList<String> sl = new ArrayList<>();
int length = lines.get(0).split(" ").length; // Number of individual
                                            // elements

// Create an array of every element individually
for (String line : lines) {
    String[] sp = line.split(" ");
    for (String semiChars : sp)
        sl.add(semiChars);
}

// This controls iteration
int j = 1;

for (int i = 0; i < sl.size() / lines.size(); i++) {
    int maxLength = 0; // Max length of character within that set
    String fixStr = ""; // String with fixed spaces

    // Determine maximum length from set
    // Compares the element lengths in multiples. Something like:
    // (element i, element i+length, element i+length+length.....)
    while (j < sl.size()) {
        fixStr = sl.get(i + j - 1);
        if (maxLength < sl.get(i + j - 1).length())
            maxLength = sl.get(i + j - 1).length();
        j += length;
    }

    j = 1; // Ready for another loop
    // Add spaces to match max length in set
    while (j < sl.size()) {
        fixStr = "";
        // Gets elements in multiples (same as above loop)
        if (sl.get(i + j - 1).length() < maxLength) {
            fixStr = sl.get(i + j - 1);
            while (fixStr.length() < maxLength)
                fixStr += " ";
            sl.set(i + j - 1, fixStr);
        }
        j += length;
    }

    j = 1; // Ready for another loop
}

// Time to create final array that is returned

String semiElement = ""; // Stores elements as sets of lines
String[] sortedArray = new String[lines.size()]; // The final Array

// Form expression and add it to final Array
for (int i = 0; i < lines.size(); i++) {
    j = 0;
    while (j < length) {
        // Add as many spaces as you want between elements here
        semiElement += (sl.get((i * length) + j) + "   ");
        j++;
    }
    sortedArray[i] = semiElement;
    semiElement = "";
}

return sortedArray;
}

输入(字符串数组):

{ "line1 11111 asd ghdfigh asdi bbb 222",
  "line2 2 asdasf gg weew bbb 666",
  "line3 22222asdas as rte fhdfh ger 777",
  "line4 asdsa 23 as wete f 8888888",
  "line5 166 azzfffffffff gjj tyi btb 99000" };

输出:

line1   11111        asd            ghdfigh   asdi    bbb   222       
line2   2            asdasf         gg        weew    bbb   666       
line3   22222asdas   as             rte       fhdfh   ger   777       
line4   asdsa        23             as        wete    f     8888888   
line5   166          azzfffffffff   gjj       tyi     btb   99000