2017-01-30 51 views
0

既存の要素を新しい配列にコピーして空の要素を配列から削除しようとしています。しかし、新しい配列を初期化すると、forループ内で初期化しても、戻り値がnullになります。Arrayから空の要素を削除する(Java)

public String[] wordsWithout(String[] words, String target) { 
    for(int i = 0; i < words.length; i = i +1){ 
     String store[] = new String[words.length]; 
     if (words[i] == target){ 
      words[i] =""; 
     } 
     else if(words[i] != target){ 
      words[i] = store[i]; 
     }  
    } 
    return words; 
} 
+1

あなたは 'store [i] = words [i];'を実行し、 'store'を返す必要があります。 –

+0

[this](http://stackoverflow.com/questions/9785336/how-to-check-if-array-indexes-are-empty-and-if-so-check-the-next)の可能な複製。確認してください、これはあなたを助けるかもしれません。 –

+0

すべての繰り返しでstore [] newを作成しています。 store []は常に単語[]の長さですが、emtpyの値だけを保持する配列 – baao

答えて

0

==演算子を使用して文字列を比較しないでください。文字列はオブジェクトなので、これは間違っています。代わりに.equals()メソッドを使用してください。これにより問題が解決されます。あなたのコードの

残りの部分は非常に混乱して、それはあなたが達成しようとしているかを理解するのは難しい:あなたは、ループの反復で新しい文字列配列storeを毎回作成し、words[i]にそのnull(デフォルトでは)値を割り当てます。コードとアルゴリズムを詳しく説明する必要があります。

+0

大丈夫ですが、等しくないのはどうですか? – Ruben

+0

同じように '!言葉[i]。(目標)と等しい。 – Andremoniy

+0

OK、私はあなたの方法を試して、結果は同じです – Ruben

0

私は以下の点でいくつか挙げています。あなたがこれを助けてくれることを願っています。

  1. String store[] = new String[words.length]は 文字列の配列をインスタンス化するが、それは任意の非 NULL値を持つ要素のいずれかをインスタンス化しません。デフォルト値はnullなので、nullの配列 文字列です。
  2. (words[i] != target)

    (!言葉[I] .equals(ターゲット))

0

私は実際にあなたが達成したいのかよく分からないが、あなたはANを削除したい場合に置き換えてください平等利用.equals()メソッドすなわちstring1.equals(string2の)を確認するには非平等をチェックする

String[] objects = Arrays.stream(new String[]{"This","", "will", "", "", "work"}).filter(x -> !x.isEmpty()).toArray(String[]::new); 
0

:あなたの配列のうち、空の文字列あなたはこのようなJava 8でのストリームとフィルターでそれを行うことができますy ouは同じメソッドを使用できますが、not(!)演算子i-eは使用できます。 !string1.equals(string2)。ループの外側でストア配列を宣言する必要があります。これは、各反復で新しいオブジェクトのオナメッドストアを作成するためです。 else条件では、このstore [i] = words [i]を実行します。

1

アレイは、あなたがしたい場合は、あなたがまだnull要素

を持つことになります古い配列のサイズに新しいArrayベースを作成する場合は、だから、新しい配列 を作成する必要がありますサイズは同じままので不変です新しい配列のサイズを取得するには、配列内のnull以外の要素を数える必要があります。 List/ArrayListを使うほうが簡単です

public String[] wordsWithout(String[] words, String target) { 
    List<String> tempList=new ArrayList<String>(); 
    for(int i = 0; i < words.length; i = i +1){ 

     if (words[i]!=null||words[i].trim().length()>0){ 
      tempList.add(words[i]); 
     } 

    } 
    return (String[]) tempList.toArray(); 
} 
+0

私はそれの論理を得るが、(リスト)を使用せずにメソッドを提案することができます。今直面している問題は、コピーされた配列の初期化です。私は、forループの外側または内側のforループを初期化できません。null値の配列のみを返します。 – Ruben

+0

@Rubenこれは配列と同じです。リストを削除して、代わりに配列を使用してください。 – AxelH

+0

配列新しい配列のサイズとして使用するか、既存の配列のサイズを使用する場合は、空の要素がまだ残っています –

関連する問題