2013-04-02 3 views
-1

Я хочу взять слово, которое когда-либо было введено, и заменить его со словом «привет» Я просто пытаюсь заменить его на слово положить. Когда я запускаю его, он разбился.заменить слова из текста, если матч

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

    final EditText r=(EditText)findViewById(R.id.editText1); 
    String t=r.getText().toString(); 
    String[] t1= t.split(" "); 


    for(int i=0;i<=t1.length;i++) 
    { 
     if(t[i].equals("hi")) 
     { 
      TextView uu=(TextView)findViewById(R.id.textView2); 
      uu.setText(t[i]); 
     } 
    } 
} 
+2

Какая ошибка? Отправьте свой логарифм, пожалуйста. – Tushar

+0

«замените его словом« привет »для того, чтобы знать, что я только пытаюсь заменить его на слово« не имеет смысла », дайте понять, чтобы все могли вам помочь –

+0

PLZ правильно использовать слова. –

ответ

0

Без фактической ошибки мы не можем сказать много, что было сказано, этого сегмента:

for(int i=0;i<=t1.length;i++) 
{  
    if(t[i].equals("hi")) 
    { 
     TextView uu=(TextView)findViewById(R.id.textView2); 
     uu.setText(t[i]); 
    } 
} 

Будет получение ArrayOutOfBoundsException, так как в Java, массивы 0 на основе и последнее доступное местоположение массива [arraySize] - 1 ,

Изменение его к этому:

for(int i=0;i<t1.length;i++) 
{  
    if(t[i].equals("hi")) 
    { 
     TextView uu=(TextView)findViewById(R.id.textView2); 
     uu.setText(t[i]); 
    } 
} 

Если решить эту проблему (по крайней мере, для этого конкретного исключения).

Это, однако, должно проходить только по символам, составляющим фразу, поэтому оно никогда не должно совпадать с hi. Изменение t[i] на t1[i] здесь: if(t1[i].equals("hi")) и, возможно, здесь: uu.setText(t1[i]); должно дать лучшее решение.

Как и FYI, использование значимых имен никогда не болит.

1

Просто измените т [я] в t1 [я]

попробовать этот

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

    final EditText r=(EditText)findViewById(R.id.editText1); 
    String t=r.getText().toString(); 
    String[] t1= t.split(" "); 


    for(int i=0;i<=t1.length;i++) 
    { 

     if(t1[i].equals("hi")) 
     { 
     TextView uu=(TextView)findViewById(R.id.textView2); 
     uu.setText(t1[i]); 
     } 


    } 

} 
0

почему вы инициализацией каждый раз

TextView UU = (TextView) findViewById (R.id .textView2);

держать это в OnCreate() один раз

0
t[i].equals("hi") 

Сравнивает объекты. заменить его t1 [я] .ToString() == "Привет"

1

заменить t1 [] вместо T [] внутри, если блок.

попробовать это:

if(t1[i].equals("hi")) вместо if(t[i].equals("hi"))

+0

Какая разница в вашем ответе и моем ответе –

+0

@Drawable, Itś совершенно другой, вы нанесли около 20 строк кода, где я сделал только замену точки. – subodh

+0

Этот момент также в моем ответе с примером –

0

Я нашел несколько ошибок в коде. Не нужно разделять. Я думаю, ваш код должен быть таким, как

final EditText r=(EditText)findViewById(R.id.editText1); 
TextView uu=(TextView)findViewById(R.id.textView2); 
String t=r.getText().toString(); 
    if(t.contains("hi")) 
    { 
     // do your stuff 
    } 
    else{ 
    //false 
    } 
0

Вы сказали, что хотите заменить любое слово, введенное словом «привет». Но вы проверяете, является ли слово (я полагаю, что вместо t [i], которое вы хотели сказать t1 [i]), равно «привет», а затем вы хотите поместить его во второй текст? Вы просто получите количество «привет» в исходном входе. Если вы хотите изменить ЛЮБОЕ слово на «привет», просто удалите тест if, и вы получите столько «привет», сколько слова, которое вы ввели.

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