2017-08-13 14 views
0

私は複数のwhileループをマージする必要はありません。私はそうのような文字列の配列を持っている:反復を避けるために、Javaで2つのwhileループをマージする方法

String[] myStrings = { "Home", "Two", "Three" }; 

私の目標は、上記の配列のいずれかの文字列がEDITTEXTで入力された場合、スパン効果を適用することです。私はwhileループを繰り返すことができますし、文字列を使ってはいけませんが、クリーンなコードでは、すべての文字列を配列に入れ、編集テキストに入力されている場合は、どのようにこれを達成するための任意のアイデア?あなたが巣を検索し、それがString Sのセットに反復して検索し、飾るためにすることを、外側のループによって発生した場合、特定のStringを飾る実際のループをしてもよい

public void onTextChanged(CharSequence s, int start, int before, int count) { 
      String str="home"; 
      Spannable spannable =textA.getText(); 
      if(s.length() != 0) { 
       textA.setTextColor(Color.parseColor("#0000FF")); 
       ForegroundColorSpan fcs = new ForegroundColorSpan(Color.GREEN); 
       String s1 = s.toString(); 
       int in=0; // start searching from 0 index 

// keeps on searching unless there is no more function string found 
       while ((in = s1.indexOf(str,in)) >= 0) { 
        spannable.setSpan(
          fcs, 
          in, 
          in + str.length(), 
          Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
        // update the index for next search with length 
        in += str.length(); 
       } 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 
+0

あなたの質問のタイトルは、実際の質問と一致していないようです...どちらの回答にしたいですか? –

答えて

3

for (String stringToSearch : myStrings){ 
    int in = 0; // start searching from 0 index for each new word to match 
    while ((in = s1.indexOf(stringToSearch,in)) >= 0) { 
    spannable.setSpan(
      fcs, 
      in, 
      in + stringToSearch.length(), 
      Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    // update the index for next search with length 
    in += stringToSearch.length(); 
    } 
} 
+0

は動作しますが、バグです。最初の要素を入力する前に最後の要素を最初に入力すると、spanは – Simon

+0

hi daveを適用しません。あなたの返答を待ってください。 – Simon

+1

おそらく、あなたが照合したい新しい 'String'ごとに' index'を '0'に再設定する必要があるからです。私はその変更を更新しました。試してみる。 – davidxxx

関連する問題