2012-08-01 44 views
1

我想要在HTML表格中顯示的字符串列表儘可能均勻分佈在指定數量的列中。在列中排列字符串集合

public String toHtmlTable(Collection<String> values, int columns) { 
    // TODO 
} 

我要顯示字符串是這樣的:

A E I 
B F J 
C G 
D H 

(i.e. "<table><tr><td>A</td><td>E</td><td>I</td></tr>...</table>") 

我不希望這樣的:

A B C 
D E F 
G H I 
J 

怎樣做一個好辦法嗎?

+0

它需要一個(單個)表內的任何原因嗎?這會在選擇文本或使用Tab鍵將焦點傳遞到下一個單元格時導致不直觀的行爲。 – meriton 2012-08-01 12:37:51

+0

每個項目與其他項目無關(實際上是一個鏈接),所以不需要支持選擇文本。我將使用'tabindex'來確保標籤的工作。 – 2012-08-01 16:26:24

回答

2

一些代碼可能會給予一定的幫助:

我有點懶,兩件事情還沒有完成:

  • 未添加<table></table>標籤。這很容易。
  • <td></td>未處理。

代碼:

public void tt() { 
    // you could ignore the ImmutableList stuff, it just prepares the string list, nothing more. 
    final List<String> l = ImmutableList.of("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"); 
    final int col = 3; 
    final int size = l.size(); 
    final int n = size/col; 
    final StringBuffer sb = new StringBuffer(""); 
    for (int i = 0; i <= n; i++) { 
     int k = i; 
     sb.append("<tr>\n"); 
     while (k < size) { 
      sb.append("<td>" + l.get(k) + "</td>"); 
      k += n + 1; 
     } 
     sb.append("\n</tr>\n"); 
    } 
    System.out.println(sb.toString()); 
} 

輸出:

<tr> 
<td>a</td><td>e</td><td>i</td> 
</tr> 
<tr> 
<td>b</td><td>f</td><td>j</td> 
</tr> 
<tr> 
<td>c</td><td>g</td> 
</tr> 
<tr> 
<td>d</td><td>h</td> 
</tr> 
0

假設你的表有n列,你必須x數量的字符串,你最終需要

m = ceiling(x/n)行。所以當你輸出一行html時,你只需要相應地抵消你的變量。你輸出的第一行應該是這樣的:

arr[0] arr[m]  arr[2m]  arr[3m]  ....  arr[nm] 

再下一行是:

arr[1] arr[m+1]  arr[2m+1]  arr[3m+1] ....  arr[nm+1] 
arr[2] arr[m+2]  arr[2m+2]  arr[3m+2] ....  arr[nm+2] 
.... 
arr[m-1] arr[2m-1]  arr[3m-1]  arr[4m-11] ....  arr[(n+1)m-1] 

你可以弄清楚如何嵌套循環的代碼輸出這個,這不是太困難。

每一行被表示如下:

arr[i] arr[m+i]  arr[2m+i]  arr[3m+i] ....  arr[nm+i] 

i與去從0(m-1)

我希望這會有所幫助。