Сравнение текста в Android
Я пытаюсь сравнить текст в Android, чтобы избежать обновления текстов, если это не нужно (в противном случае тексты для разных полей обновляются каждые 50 мс).
С обычными текстами это не проблема. Все отлично работает Но: если в тексте есть числа, текст кажется не равным. Зачем?
Некоторые примеры: "Abschaltpunkt" равно "Abschaltpunkt" (ОК) / "Gewicht" равно "Gewicht" (ОК) / "100 кг" НЕ равно "100 кг" (NOK) / "Abschaltpunkt 2" равно НЕ равняется "Abschaltpunkt 2" (NOK"
Новый вопрос после редактирования (теперь сравнение работает нормально). Как видите, я использую поток пользовательского интерфейса для обновления текста. Это приложение работает в сети и получает около 300 сообщений в секунду с различными данными (да, это необходимо). Поэтому мне нужно сравнение, иначе поток заблокирован, и приложение не будет отвечать на входные данные пользователя. Есть ли другое решение? Или мое решение хорошее?
Это мой код:
/**
* Compares the current and new text und updates the text if necessary
* @param RessourceID given by R.id...
* @param New text
*/
private void ChangeText (final int RessourceID, final String sText) {
try {
TextView tv = (TextView) findViewById(RessourceID);
// Erst prüfen ob Text ersetzt werden muss -> Spart Rechenzeit
if (tv.getText().toString().equals(sText)) {
Log.e(this.getClass().getSimpleName(), "Text nicht ersetzen: " + tv.getText() + " != " + sText);
} else {
ChangeTextThread(tv, sText);
Log.e(this.getClass().getSimpleName(), "Text ersetzen: " + tv.getText() + " != " + sText );
}
} catch (Throwable t) {
Log.e(this.getClass().getSimpleName(), "ChangeText", t);
}
}
/**
* Change the text in UI tread
*/
private void ChangeTextThread (final TextView tv, final String sText) {
this.runOnUiThread(new Runnable() {
public void run() {
try {
tv.setText(sText);
} catch (Throwable t) {
Log.e(this.getClass().getSimpleName(), "ChangeTextThread", t);
}
}
});
}
2 ответа
Попробуй так
if(tv.getText().toString().equals(sText))
Используемый .equals()
или же .equalsIgnoreCase()
метод сравнения строк
Попробуйте код ниже:
if(tv.getText().toString.equalsIgnoreCase(sText)){
//Do your stuff here
}