2014-02-27 72 views
0

具有源字符串打破字符串轉換成字符串數組

str = "one 
two 
three 
four 
five 
six 
seven 
eight 
nine" 

我想串

String[] mas; 
mas[0] = "one 
two 
three 
four" 

mas[1] =five 
six 
seven 
eight" 

mas[2] ="nine" 

我想這將是我的線做一個函數的數組一串字符串。和陣列的每一行中應該從原來的字符串4個或6或N行

回答

5

使用String.split()regex\\s+(或\n+例如,取決於你究竟)。

如果需要,可以連接2個或更多的字符串,但是在使用split()的數組之後 - 應該相當容易,試試吧!

祝你好運。如果您在實施第二部分時遇到麻煩,請隨時提出任何問題。


編輯:好像你有麻煩與concatting字符串。這守; D用簡單的迭代來完成和StringBuilder

int SIZE = 4; 
    String[] arr = str.split("\\s+"); 
    List<String> res = new ArrayList<>(); 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < arr.length; i++) { 
     sb.append(arr[i]).append('\n'); 
     if (i % SIZE == SIZE-1) { 
      res.add(sb.toString()); 
      sb = new StringBuilder(); 
     } 
    } 
    if (sb.length() != 0) res.add(sb.toString()); 
    System.out.println(res); 
} 

注意resList<String>,如果你想把它當作一個數組,你可以隨時使用toArray()方法。

+0

事實上,我得到的是一串字符串。但是我不能創建另一個數組,其中每個元素將包含4行 – user2954895

+0

@ user2954895這是爲什麼?你的問題是什麼?您是否熟悉concatting字符串或使用['StringBuilder'](http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html)? – amit

+0

是的,我知道。問題是我有一個字符串數組。 1000個元素的例子。我不明白這個算法,我怎麼做另一個數組,其中的每個元素等於第一個數組的1-20行。行20-40的第一陣列的第二元素。等 – user2954895

0

調用此方法,你會得到你的string

public String[] stringSplitter(String input){ 
    String[] splitStr = input.split("\\s+"); 
    return splitStr ; 
} 

呼叫的Array下面的方法來組織你的結果在小組四個

public ArrayList<String> stringGrouping(String[] input){ 
    int iter = 4; 
    ArrayList<String> result = new ArrayList<String>(); 
    for(int i=0; i<input.length(); i++){ 
      String temp=""; 
      while(iter>0){ 
       temp.append(input.get(i)); 
      } 
      result.add(temp); 
      iter =4; 
    } 

說明:

- 方法split採取regex輸入檢測要分割的字符並返回分割字的Array

-The regex「\ s +」檢測到任何發生的一個或多個空格。

我希望它能幫助

+0

這是什麼意思「\\ s +」?你的函數返回一個字符串數組,每個字符串只是原始字符串的一行。我需要一行到結果數組中包含4行,從原始字符串 – user2954895

+0

@ user2954895檢查修改後的答案。我希望我能很好地理解你。 –

+0

不幸的是,這不是我所需要的((( 我說我做什麼。 我有一個文本。大的。我把它保存在一個字符串,然後我要上分頁符文,一個頁面包含20條線。我可以在一行中打敗所有的文本,但是我不能從結果的machchiva,形成第20行。 – user2954895

1

如果要分割成與每個數組元素一個行數組,然後String.split應該這樣做;請參閱@ amit的答案。

如果你想分裂成每個數組元素有N行的數組(如你的例子),沒有標準的庫類/方法來做到這一點。據我所知,任何常用的第三方庫都沒有這樣做的方法。

所以你可以做的是下列之一:

  • 拆分成單一線的陣列...並將這些陣列重新組合爲N組。
  • 反覆呼叫Matcher.find(...)以匹配/逐句通過換行符,並且每N次您撥打String.substring(...)來拉出一組行。

(它威力也有可能產生與投放有效計數N換行符複雜正面看,後面的粗糙的正則表達式。但是,這是(IMO)「討厭」 ......)

1
@Test 
public void test(){ 
    String str = "one\ntwo\nthree\nfour\nfive\nsix\nseven\neight\nnine"; 
    int number = 52; 
    String[] strArr = getArray(str, 52); 
} 

String[] getArray(String str, int number){ 
    int nb = (int) Math.ceil(number/20); 
    String[] strSplit = str.split("\n"); 
    String[] strArr = new String[nb+1]; 
    int cursor = 0; 
    for (int colNumberForFinalArray=0; colNumberForFinalArray<nb+1; colNumberForFinalArray++){ 
     strArr[colNumberForFinalArray] = ""; 
     int countElts = 20; 
     if(colNumberForFinalArray == nb){ 
      countElts = number % 20; 
     } 
     for(int i = cursor; i< cursor+countElts ; i++){ 
      strArr[colNumberForFinalArray] += strSplit[i]; 
      if(i < cursor+countElts-1){ 
       strArr[colNumberForFinalArray] += "\n"; 
      } 
     } 
     cursor = cursor+countElts; 
    } 
    return strArr; 
} 
+0

是的,你明白我想要什麼)))只有幾個朋友)我有很多行。任何時候。我不認識他。但我確切知道我需要打破20。例如,如果結果是51 20 20 11 如果52然後20 20 12 我該如何解決功能不要求最後一位數字? – user2954895

+0

我更新代碼等待2分鐘 –

+0

我沒有測試,因爲這裏的輸入str是很小的,但它會是這樣的...不要忘記管理一個異常,如果輸入str是小..如果它的工作接受答案plz;) –