2017-09-14 10 views
0

私はStringで変換した要素の配列を持っていました。 しかし、この文字列は、空の配列の要素を再び保持し、別のStringと比較することはできません。コレクションを使用せずに配列から未使用の要素を削除する方法

空の要素を削除するにはどうすればよいですか? コレクションの使用方法がわかりません。別の方法がありますか?

char[] copyLoop = new char[26]; 
     for (int i = 0; i < letters.length; i++) { 
      if (letters[i] > 1) { 
       char c = (char) (i + 97); 
       copyLoop[i] = c;  
      } 
     } 
     String rslt = String.copyValueOf(copyLoop); 
     return rslt; 
+3

配列に「空」要素はなく、配列のサイズを変更することもできません。あなたはどういう意味ですか? –

+0

私はこのコードが実際に必要な理由を理解しようとしています。 "copyLoop"配列は、 "letters"要素の数と位置に応じて '[97、99、100、102、etc]'( '[a、c、d、f、etc]') "> 1'を評価する配列です。 "lettersLoop"配列は、 "letters"配列がどのように有用ではないのでしょうか? – geneSummons

答えて

1

配列に空の要素はなく、配列のサイズを変更することもできません。興味のあるすべての要素を、配列の一端(例えばゼロから始まる)に配置し、それらの間に「興味のない」要素を入れずに配列の一部から文字列を構築するだけでよいのです。

別の変数を使用して、次の空の要素のインデックスを配列に格納します。文字が見つかるたびに、この変数を増やします。 lettersの反復処理が終了すると、この変数には文字列の作成に使用する配列の長さが含まれます。

char[] copyLoop = new char[26]; 
    int dst = 0; 
    for (int i = 0; i < letters.length; i++) { 
     if (letters[i] > 1) { 
      char c = (char) (i + 97); 
      copyLoop[dst++] = c;  
     } 
    } 
    return new String(copyLoop, 0, dst); 

あるいは、当然のことながら、(内部的に効果的に同じことをやっている)StringBuilderを使用します。

StringBuilder copyLoop = new StringBuilder(26); 
    for (int i = 0; i < letters.length; i++) { 
     if (letters[i] > 1) { 
      char c = (char) (i + 97); 
      copyLoop.append(c);  
     } 
    } 
    return copyLoop.toString(); 
+0

正しく動作します! – Clash

+0

あなたを気の毒にして申し訳ありませんが、どのように新しい文字列(copyLoop、0、dst); copyLoopという新しいStringを定義し、0を削除し、length = dstを指定します。それが正しいか? – Clash

+0

[Javadoc](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#String-char:A-int-int-)。 –

0

残念ながらません。 Javaの配列は縮小/展開できません。サイズは一定に設定されています。

  1. 使用コレクション、すなわち文字ArrayList<Character> list = new ArrayList<>();のリストを作成し、それを使用して、各ループサイクル後に必要のない項目を削除する:あなたは回避できる2つの方法があります。

  2. forループの各サイクルで、配列内の項目を削除する必要がある場合は、新しいchar []配列を作成します。これは小さいもので、古いものの内容を新しいものにコピーします削除した値。

また、文字列を操作する場合は、可変文字列クラスs.aを使用することをお勧めします。 StringBuilderまたはStringBufferを使用して、文字列に文字を追加/削除できます。あなたの場合、それは最善の解決策であるようです。

関連する問題