2014-04-02 18 views
-1

我有兩個字符串什麼是使用Java水平連接文本的好庫?

AAA 
AAA 
AAA 

BBB 
BBB 
BBB 

我正在尋找的是一個方法String concatenateHorizontally(String left, String right, String separator, options...)我可以通過這些字符串和接收字符串

AAA BBB 
AAA BBB 
AAA BBB 

我在Vim中(使用塊式視覺模式)做了很多事情,但是找不到允許在Java代碼中執行它的庫。我知道,對於簡單的例子來說,這是微不足道的實現,但我希望有人已經以更通用的方式解決了這個問題(例如,通過選項來決定是替換還是附加,插入到固定位置還是行結束,處理不同的換行符,糾正Unicode行爲等)。

有人能指點我這樣的圖書館水平連接文本?

+1

這個功能似乎很小,我認爲很難找到包含這個功能的特定庫。我知道讓自己的任務看起來很乏味,但是你不是隻是有點懶惰嗎? :P –

+0

這不是我想要避免的那種單調乏味,而是重新設計了某人可能已經爲各種各樣的車輪解決的車輪問題。許多文本編輯器提供這種行爲,所以我猜測像這樣的文本操作捆綁在某個庫中。 – kba

回答

0
public class Test 
{ 

    public static void main(String[] args) 
    { 
     System.out.println(concatenateHorizontally("AAA\nBBB\nCCC", "111\n222\n333", "\n", " ")); 
     System.out.println(concatenateHorizontally("AAA\nBBB", "111\n222\n333", "\n", " ")); 
     System.out.println(concatenateHorizontally("AAA\nBBB\nCCC", "111\n222", "\n", " ")); 
    } 

    private static String concatenateHorizontally(final String left, final String right, String br, String concat) 
    { 
     { 

      String[] lefts = left.split(br); 
      String[] rights = right.split(br); 
      int max = Math.max(lefts.length, rights.length); 

      StringBuilder sB = new StringBuilder(); 

      for (int i = 0; i < max; i++) 
      { 

       if (i < lefts.length) 
        sB.append(lefts[i]).append(concat); 

       if (i < rights.length) 
        sB.append(rights[i]); 

       sB.append(br); 
      } 

      return sB.toString(); 
     } 
    } 
} 
+0

謝謝,但是,我不是在尋找算法,而是爲了更多功能的圖書館。但是因爲這是最好的算法(基本上可以用於不同線數的字符串,雖然它會修剪較短的字符串並且不對齊它們),但我會接受它。感謝您的輸入Franz Ebner,user3313050和tassaert.l。 – kba

2

您可以按行返回並交替追加。

由於「輕鬆殺死」而沒有代碼示例。

編輯:

實現,因爲 「好」 的:

String concatenateHorizontally(final String left, final String right) { 

    String br = "\n"; 

    String[] lefts = left.split(br); 
    String[] rights = right.split(br); 

    if(lefts.length!=rights.length) 
     throw new UnsupportedOperationException("This is where my time becomes money"); 

    StringBuilder sB = new StringBuilder(); 

    for (int i = 0; i < lefts.length; i++) { 

     sB.append(lefts[i]); 
     sB.append(rights[i]); 
     sB.append(br); 
    } 

    return sB.toString(); 
} 
+0

這就是我現在正在做的,是的。如果'left'的行多於'right',你的代碼就會中斷。如果'right'有多於'left'的行,並不是所有的'right'都被連接在一起。 – kba

+0

StackOverflow是關於'給我一個提示',而不是'爲我實現我的接口,包括所有可能性'... –

+0

這就是爲什麼我要求提供超越微不足道的行爲的圖書館暗示。 – kba

0

試試這個:

class m 
    { 
    public static void main(String[] args) 
    { 
    String s="AAA"+"\n"+ 
      "AAA"+"\n"+ 
      "AAA"+"\n"; 
    String s1="BBB"+"\n"+ 
      "BBB"+"\n"+ 
      "BBB"+"\n"; 

    String[] gets=s.split("\n"); 
    String[] gets1=s1.split("\n"); 
    String concate=""; 
    for(int i=0;i<3;i++) 
    { 
    concate=concate+gets[i]+"\t"+gets1[i]+"\n"; 
    } 
    System.out.print(concate);   
}  
} 

輸出:

 AAA BBB 
    AAA BBB 
    AAA BBB 
+0

是的,這是我提到的微不足道的實現(這就是我現在所做的)。但是如果我想要擴展行爲而不是連接行末尾的行,但是將「右」部分插入到固定位置? – kba

+0

@kba如果您希望將正確的零件放在一個固定的位置,您可能希望使用空格而不是分隔兩個零件的選項卡。在這種情況下,計算要添加的空間量(想要的位置減去左側字符串的長度),並在連接右側部分之前連接該空間量。 –

+0

@ tassaert.l對,如果兩個字符串有不同數量的行,還必須計算空格。 – kba

相關問題