具有源字符串打破字符串轉換成字符串數組
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行
具有源字符串打破字符串轉換成字符串數組
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行
使用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);
}
注意res
是List<String>
,如果你想把它當作一個數組,你可以隨時使用toArray()
方法。
調用此方法,你會得到你的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 +」檢測到任何發生的一個或多個空格。
我希望它能幫助
這是什麼意思「\\ s +」?你的函數返回一個字符串數組,每個字符串只是原始字符串的一行。我需要一行到結果數組中包含4行,從原始字符串 – user2954895
@ user2954895檢查修改後的答案。我希望我能很好地理解你。 –
不幸的是,這不是我所需要的((( 我說我做什麼。 我有一個文本。大的。我把它保存在一個字符串,然後我要上分頁符文,一個頁面包含20條線。我可以在一行中打敗所有的文本,但是我不能從結果的machchiva,形成第20行。 – user2954895
如果要分割成與每個數組元素一個行數組,然後String.split
應該這樣做;請參閱@ amit的答案。
如果你想分裂成每個數組元素有N行的數組(如你的例子),沒有標準的庫類/方法來做到這一點。據我所知,任何常用的第三方庫都沒有這樣做的方法。
所以你可以做的是下列之一:
Matcher.find(...)
以匹配/逐句通過換行符,並且每N次您撥打String.substring(...)
來拉出一組行。(它威力也有可能產生與投放有效計數N
換行符複雜正面看,後面的粗糙的正則表達式。但是,這是(IMO)「討厭」 ......)
@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;
}
是的,你明白我想要什麼)))只有幾個朋友)我有很多行。任何時候。我不認識他。但我確切知道我需要打破20。例如,如果結果是51 20 20 11 如果52然後20 20 12 我該如何解決功能不要求最後一位數字? – user2954895
我更新代碼等待2分鐘 –
我沒有測試,因爲這裏的輸入str是很小的,但它會是這樣的...不要忘記管理一個異常,如果輸入str是小..如果它的工作接受答案plz;) –
事實上,我得到的是一串字符串。但是我不能創建另一個數組,其中每個元素將包含4行 – user2954895
@ user2954895這是爲什麼?你的問題是什麼?您是否熟悉concatting字符串或使用['StringBuilder'](http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html)? – amit
是的,我知道。問題是我有一個字符串數組。 1000個元素的例子。我不明白這個算法,我怎麼做另一個數組,其中的每個元素等於第一個數組的1-20行。行20-40的第一陣列的第二元素。等 – user2954895