2014-11-20 19 views
1

我試圖將一些舊的VB6代碼轉換爲我的公司的Java。除了格式化字符串之外,我已經完成了所有工作。在舊的VB6代碼中,他們將使用Tab(N)函數來決定字符串在寫入文本文件時的位置。我一直在尋找一種方法來用Java以任何方式複製它。我現在正試圖找出String.format方法,但我對它的功能有些困惑。有沒有其他的功能,或者我可以設置一個字符串在java中的絕對位置的方式?一個例子是第一個字符串的長度爲15個字符,並且該行中的下一個字符串需要在行位置50處,而另一個字符串的長度是4個字符,並且之後的每個字符串應該位於位置19,34,41,51 ,59,66,76,83和90.任何幫助將不勝感激!Java的等效視覺基本選項卡功能

例子:

(name)           PRODUCTION DATE : (date) 

SERVICE   PROC MODS  BILLED  ALLOWED  PAID   ADJ ADJ LINE REMARK 
DATE    CODE   UNI AMT  AMT  UNI AMT  AMT CODES CODE 
+0

的String.format或的許多printf的方法之一是用於工作的最佳工具。有許多printf教程頁面;我建議尋找他們。 – VGR 2014-11-20 18:06:27

+0

謝謝,我從未使用過任何printf方法。我會檢查出來 – user3076241 2014-11-24 15:39:55

回答

0

我遇到了類似的問題,並最終創造了這樣的建設者。

public class TabLineBuilder { 

    int length; 
    private String line; 
    StringBuilder sb; 

    public TabLineBuilder(int length) { 
     this.length = length; 
     initialize(); // call non-overridable method 
    } 

    public TabLineBuilder insert(int pos, String text) { 
     sb.replace(pos, pos + text.length(), text); 
     line = sb.toString(); 
     return this; 
    } 

    public String toString() { 
     return line; 
    } 

    private void initialize() { 
     // new line of spaces 
     line = String.format("%" + length + "s", ' '); 
     sb = new StringBuilder(line); 
    } 

    public void clear() { 
     // Overridable public method 
     initialize(); 
    } 
} 

實施例:

TabLineBuilder tlb = new TabLineBuilder(120); 
String line = tlb.insert(0, "(name)").insert(50, "PRODUCTION DATE").toString(); 
System.out.println(line); 
tlb.clear(); 
line = tlb.insert(0, "DATE").insert(19, "CODE").insert(34, "UNI").toString(); 
System.out.println(line); 
tlb.clear(); 

輸出:

(name)           PRODUCTION DATE              
DATE    CODE   UNI