2016-07-13 107 views
-1

我有一個像下面如何將字符串插入字符串數組中的特定索引並在其後移動字符串?

String singlestr="hello|world|how|are|you"; 
String[] arraystr = singlestr.split("|"); 

一個代碼和結果我有=>

arraystr[0]=hello 
arraystr[1]=world 
arraystr[2]=how 
arraystr[3]=are 
arraystr[4]=you 

現在的問題是我如何可以插入一個新的字符串到3現在的位置?有什麼功能嗎?

插入一個新的字符串索引2後

預期輸出:

arraystr[0]=hello 
arraystr[1]=world 
arraystr[2]=hi 
arraystr[3]=how 
arraystr[4]=are 
arraystr[5]=you 
+0

陣列有侷限性喜歡你只能分配單一類型的數據,長度應該申報,你不能改變長度運行,所以最好是使用像收藏列表或數組列表此它會解決你的問題,它比這個簡單的數組有優勢 – Vickyexpert

回答

0

編輯:合併的代碼段併除去多餘的說話。 :)

我的第一個建議是在插入元素之前將數據存儲在LinkedList中。該類有一個add(index,value)類型的方法,可以完全按照您的需要進行操作。因此,例如,

LinkedList<String> list = new LinkedList(arraystr); 
list.add(2,"hi"); 

如果你必須在最後一個數組,那麼你可以使用鏈表來保存你的數據,然後使用指定者()方法將其轉換回(到一個新的更大的陣列)

String[] newArray = list.toArray(); 

如果您不允許使用一個LinkedList,甚至把你的數據,我看不出有任何的替代比移動所有後來值向下一個缺口在某種循環,然後在加入你的價值創建空間。但正如別人指出的那樣,你不能增加數組的大小。所以,除非你的數組有額外的空間(不是你的情況),否則你將需要創建一個新的更大的數組。在這種情況下,你最好使用List實現之一。

0

字符串數組不能增加它們的大小。如果你想添加它,你需要實例化一個全新的數組,然後將你的初始數組中的值複製到新的字符串數組中。

實施例:

在這個例子中我們使用的是for循環通過所有索引的循環並將它們分配給新的數組,但是當我們得到所需的索引我們因此分配一個新的值「移動」新陣列中的其他值。

String[] first = {"hello", "world", "how", "are", "you"}; 
String[] second = new String[5]; 

for(int i = 0; i < first.length; i++){ 
    if(i != 2){ 
     second[i] = first[i]; 
    }else{ 
     second[2] = "hi"; 
    } 
} 

for(String s: second){ 
     System.out.println(s); 
} 

超級醜陋不?

我會推薦使用ArrayList或List來代替。 Arraylists有能力增加它們的長度,而不需要對最初的數組做任何特殊的處理。你可以簡單地說add(index,value)。

例子:

ArrayList<String> values = new ArrayList<>(); 
values.add("hello"); 
values.add("world"); 
values.add("how"); 
values.add("are"); 
values.add("you"); 
values.add(2,"Hi"); //adding to index 2! 

現在,如果由於某種原因,你需要一個普通的舊陣列,它是超級容易只是轉換你的ArrayList回陣列。

String[] newVal = new String[5]; 
values.toArray(newVal); 
+0

好吧,這似乎有幫助。感謝你的付出。之後我會檢查並接受答案。非常感謝@basic :) –

+0

@jdoe不用擔心這是什麼在這裏:) – basic

1

嘗試使用StringBuilder。使用append()方法插入arrayStr中的元素,然後使用insert()在所需的位置插入新文本。 toString()方法將返回完成的字符串。

我的示例代碼假定您知道新文本的確切插入點。更通用的方法是使用indexOf()方法獲取插入點後文本的偏移量,然後在調用insert()時使用該索引作爲偏移量參數。另外,您的示例將初始字符串拆分爲不帶嵌入分隔符的單獨單詞。 toString()會返回「helloworldhihowareyou」。如果你想在結果字符串中分離單詞,在將它添加到StringBuilder對象之前,將一個空格char(或其他分隔符?)附加到arrayStr的每個元素。

String singlestr="hello|world|how|are|you"; 
String[] arraystr = singlestr.split("|"); 
StringBuilder builder = new StringBuilder(); 
String newString; 

for (String s: arraystr) { 
    builder.append(s.concat(" ")); // Add with separator 
} 

builder.insert(10,"hi"); 
newString = builder.toString(); 
0

您需要將元素複製到一個新的稍大的數組中。 System.arraycopy()可能是最有效的方法:

String singlestr="hello|world|how|are|you"; 
String[] arraystr = singlestr.split("\\|"); // Note: pipe needs to be regex-escaped 
String[] newarray = new String[arraystr.length + 1]; 
System.arraycopy(arraystr, 0, newarray, 0, 2); 
newarray[2] = "hi"; 
System.arraycopy(arraystr, 2, newarray, 3, arraystr.length - 2); 
相關問題