2016-07-13 7 views
-1

今の問題は、私は第三のpostionに新しい文字列を挿入する方法である私は文字列配列内の特定のインデックスに文字列を挿入し、その後に文字列をシフトする方法はありますか?

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 

がありますか?機能はありますか?

インデックス2に新しい文字列を挿入した後

期待出力:

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

アレイを使用すると、単一のタイプのデータを割り当てることができるように、長さがとても良く、このためのリストまたはArrayListのような使用のコレクションである、あなたは長さランタイムを変更することはできません、宣言されなければならない制限がありますそれはあなたの問題を解決し、このような単純な配列以上の利点を持っています – Vickyexpert

答えて

0

編集:連結コードセグメントと除去冗長話します。 :)

私が最初に提案したのは、要素を挿入する前にLinkedListにデータを保存することでした。そのクラスには、あなたが望むものを正確に行うadd(index、value)型のメソッドがあります。あなたが最後に配列を持たなければならないのであれば、たとえば、

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

は、あなたは新しい大きな配列に(それをバックに変換するためのtoArray()メソッドを使用し、その後、あなたのデータを保持するためのリンクリストを使用することができますあなたもあなたのデータを保持するためのLinkedListを使用することを許可されていない場合)

String[] newArray = list.toArray(); 

、私はループのいくつかの種類に1つのノッチ下のすべての後に値を移動し、その後で自分の価値を追加するよりも代替を見ていませんスペースが作成されました。しかし、他の人が指摘しているように、配列のサイズを大きくすることはできません。したがって、配列に余分なスペースがない場合(あなたのケースではそうではない)、とにかく新しい大きな配列を作成する必要があります。この場合、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それは、SOがここにあるものである心配はありません:) – basic

1

StringBuilderを使用してください。 append()メソッドを使用してarrayStrから要素を挿入し、insert()を使用して目的の場所に新しいテキストを挿入します。 toString()メソッドは、終了した文字列を返します。

このサンプルコードでは、新しいテキストの正確な挿入ポイントがわかっていることを前提としています。より一般的な方法は、indexOf()メソッドを使用して挿入ポイントに続くテキストのオフセットを取得し、insert()の呼び出しでそのインデックスをオフセット引数として使用することです。また、この例では、最初の文字列を、区切り文字が埋め込まれていない別々の単語に分割しています。 toString()は "helloworldhihowareyou"を返します。結果の文字列で単語を区切りたい場合は、arrayByderオブジェクトに追加する前に、arrayStrの各要素にスペースchar(またはその他の区切り文字?)を追加します。

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); 
関連する問題