2016-06-08 3 views
0

В этом вопрос.Замена тех же строк, но с разными строковыми значениями?

(1) __ также является звездой. (2) __ вращается вокруг Солнца.

edittext1: _______ edittext2: _______

Таким образом, в первом пустом, я показываю, что тип пользователя в редактировании текста. Если он набирает Sun, тогда выход будет выглядеть следующим образом.

(1) _Sun_is также звезда. (2) __ вращается вокруг Солнца.

edittext1: ВС edittext2: _______

Так что для (1) Я вместо "__" с моим редактировать текстовое значение, как указано выше. Как это сделать с (2). Я пробовал одну и ту же логику с (2), но также заменяет первое значение.

(1) Планеты также звезды. (2) Планеты вращается вокруг Солнца

edittext1: ВС

edittext2: Planets

public class MainActivity extends AppCompatActivity { 

    EditText ed1,ed2,ed3; 
    String edtv1,edtv2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ed1= (EditText) findViewById(R.id.editText); 
     ed2= (EditText) findViewById(R.id.editText2); 
     ed3= (EditText) findViewById(R.id.editText3); 
     final TextView tv = (TextView) findViewById(R.id.textView); 


     final String sentence = tv.getText().toString(); 


     if (ed1 != null) { 
      ed1.addTextChangedListener(new TextWatcher() { 
       @Override 
       public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

       } 

       @Override 
       public void onTextChanged(CharSequence s, int start, int before, int count) { 

       } 

       @Override 
       public void afterTextChanged(Editable s) { 

        tv.setText(String.format("%s_", sentence.replace("__", "_" + s.toString()))); 
       } 
      }); 
      edtv1 = ed1.getText().toString(); 

     } 
     if (ed2 != null) { 
      ed2.addTextChangedListener(new TextWatcher() { 
       @Override 
       public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

       } 

       @Override 
       public void onTextChanged(CharSequence s, int start, int before, int count) { 

       } 

       @Override 
       public void afterTextChanged(Editable s) { 

        tv.setText(String.format("%s_", sentence.replace("__", "_" + s.toString()))); 
       } 
      }); 
      edtv2 = ed2.getText().toString(); 

     } 


    } 
} 

выше полный код.

+0

вы уверены, что вы используете правильные редактировать текстовые ссылки? –

+0

Да .. @ harvey_slash.And второй раз также я пытаюсь заменить «__», поэтому он также заменяет первый. –

+0

от 'first one', я предполагаю, что вы имеете в виду первый текст редактирования. исправьте меня, если я ошибаюсь –

ответ

0

Вы можете использовать функцию ниже:

String s = "1 abc 1 def"; 
Log.e("Test", replace(s, "1", "1test", "2test")); --> value: 1test abc 2test def 
// fuction to replace 
private String replace(String source, String toReplace, String... replacements) { 
    StringBuilder stringBuilder = new StringBuilder(source); 
    int startIndex = 0; 
    for (int i = 0; i < replacements.length; i++) { 
     int index = stringBuilder.indexOf(toReplace, startIndex); 
     if (startIndex < 0) { 
      break; 
     } 
     stringBuilder.replace(index, index + toReplace.length(), replacements[i]); 
     startIndex = index + replacements.length; 
    } 
    return stringBuilder.toString(); 
} 
+0

спасибо @Kinfisher Phuoc –

0

Вы не можете.

Вы должны сделать первый и второй пустые разные для точной замены. Вы можете сделать это, положить разного количество подчеркивания

String sentence = "(1)___ is also a star.(2)__ revolves around the Sun."; 

sentence.replace("___", "Sun"); 
sentence.replace("__", "Planet"); 

или вы можете включить номер дифференцировать заготовки

String sentence = "(1)__ is also a star.(2)__ revolves around the Sun."; 

sentence.replace("(1)__", "(1)" + "Sun"); 
sentence.replace("(2)__", "(2)" + "Planet"); 
+0

На самом деле, я должен получить его через Url (JSON Parsing). Так что я не могу его изменить –

+0

@ShwetabhSingh, вы можете разделить строку на __. В зависимости от текста редактирования, вы можете изменить соответствующую строку –

+0

Я буду попробуйте это, но любое другое решение для этого. @ harvey_slash –

1
String string = "(1)__ is also a star.(2)__ revolves around the Sun."; 
//First do a string split: 
// then you'll have an array of strings 
String[] parts = string.split("__"); 

во 2 редактировании текста слушателя, вы можете изменить конец 2-й элемент массива деталей. Во-первых, вы можете изменить конец первого элемента и так далее.

Для отображения, просто распечатать весь массив строк

+0

ОК, я пробую это. –

 Смежные вопросы

  • Нет связанных вопросов^_^