2017-10-02 12 views
1

文字列内の特定の位置にcharを追加する効率的な方法を探しています。Java:文字列の特定の位置にcharを追加する(パフォーマンス)

私の例:

package test; 

public class Test { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 

     //Creating A String Object that Hold "Hello" 
     String seq = new String("Hello"); 
     System.out.println(seq);/*printing Hello*/ 

     /*putting tha char _ in the 3 Position : He_llo */ 
     seq = seq.substring(0, 2)+ "_" + seq.substring(2, seq.length()); 
     System.out.println(seq);/*it prints He_llo*/ 

    } 

それだけの単純な機能ですが、私の本当のプログラムの中で私が扱っています:400-600文字の長さである

  • の1-文字列。
  • 2私は 文字列の真ん中に_charを追加するために多くの呼び出しを行います。この操作seq = seq.substring(0, 2)+ "_" + seq.substring(2, seq.length()); は、最悪のケースではO(n)を取ったので、文字列オブジェクトまたはStringBuilderオブジェクトを使用して

は、私の意見で使用するのに最適なオブジェクトではありません。

私の質問:

この目的に適したコレクションは何ですか?

文字オブジェクトのリストを使用していると思いますので、挿入にはO(1)しか必要ありませんが、わかりません。

私はいくつかの洞察力を教えてください。

ありがとうございます。この場合

+0

は 'StringBuilder'を使用してください。また、これは: "私は文字オブジェクトのリストを使用していると思うので、挿入にはO(1)しかかかりませんでした"が間違っています。 – Oleg

+0

O(1)だけを受け入れない理由を答えてください。ありがとう –

+0

[StringBuilder.insert](https://docs.oracle.com/javase/7/docs/api/java/lang/)を見ましたか? StringBuilder.html#insert(int、%20java.lang.String))? –

答えて

1

私はStringBuilderを使用します:)

String yourString = "Hello"; 

StringBuilder = new StringBuilder(yourString); 
sb.insert(2, '_'); 

System.out.println(sb.toString()); 

出力は次のようになります。He_llo

EDIT:置き換えのStringBuilderとStringBufferを

+0

質問はパフォーマンスに関するものなので、新しい(Java 5+) 'StringBuilder'クラスではなく、同期した' StringBuffer'クラスを使う理由は何ですか?リリースされたJDK 5では、このクラスは、単一のスレッド 'StringBuilder'によって使用される同等のクラスで補完されています。 'StringBuilder'クラスは一般的にこれよりも優先されるべきですが、これは同じ操作のすべてをサポートしますが、同期を実行しないので高速です* – Andreas

+1

さらに一般的に、なぜあなたは' StringBuffer' ['Matcher.appendReplacement()'](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html#appendReplacement-java.lang.StringBuffer-java)よりも優先されます。 lang.String-))? – shmosel

+0

@shmosel Java 9では、これも必要なくなりました。[Matcher.appendReplacement(StringBuilder sb、String replacement)]](https://docs.oracle.com/javase/9​​/docs/api/java/) Java 9では、これも(ほとんど)不要になりました。https://docs.oracle.com/(/ util/regex/Matcher.html#appendReplacement-java.lang.StringBuilder-java.lang.String-) – Andreas

関連する問題