Ich versuche, eine kleine Android-App zu entwickeln, und ich stieß auf dieses ziemlich "seltsame" Problem, ich muss zwei Strings vergleichen und wenige Dinge tun, wenn sie übereinstimmen, habe ich verwendet == operator first, und selbst wenn die 2 Strings identisch waren, behandelt meine if-Anweisung sie als nicht gleich und geht einfach weiter zu nächsten Anweisungen (Ich weiß, dass die zwei Strings gleich sind, weil ich ihre Werte beobachte und Schritt für Schritt debugge). Also habe ich versucht .equals Operator stattdessen zu verwenden, aber es ist mir geben StringIndexOutOfBoundsException auf den beiden vorherigen Aussagen, die sind:o1.equals (Objekt o2) Operator verursacht Fehler
String s1 = s.substring(0, s.indexOf("\t"));
String s2 = subjectName.substring(0, subjectName.indexOf("\t"));
Hier ist ein Screenshot von Schritt-für-Schritt-Debugging, die beide s1 und s2 einen Wert " Mathematik "aber die if-Anweisung ignoriert es. enter image description here
Hier ist ein "vollständiger" Code:
if(marks.size() > 0)
{
for(Student student: students)
{
ArrayList<String> subjectNames = new ArrayList<>();
String studentFullName = student.getSurName() + "\t" + student.getName();
studentNames.add(studentFullName);
for(Subject subject: subjects)
{
String subjectName = subject.getName() + "\t" + 0;
subjectNames.add(subjectName);
}
markListHashMap.put(studentFullName, subjectNames);
}
for(Mark mark: marks)
{
Student student = dbHelper.getStudent(mark.getStudentRegister());
String fullName = student.getSurName() + "\t" + student.getName();
Subject subject = dbHelper.getSubject(mark.getSubjectId());
String subjectName = subject.getName() + "\t";
subjectName = subjectName + dbHelper.getTotal(mark);
ArrayList<String> subjects = (ArrayList<String>) markListHashMap.get(fullName);
int index = 0;
for(String s: subjects)
{
String s1 = s.substring(0, s.indexOf("\t"));
String s2 = subjectName.substring(0, subjectName.indexOf("\t"));
if(s1 == s2)
{
s = s.substring(0, s.indexOf("\t"));
s = s + subjectName.substring(subjectName.indexOf("\t") + 1, subjectName.length());
markListHashMap.get(fullName).set(index, s);
}
else
index++;
}
}
Wenn 'sstring (0, s.indexOf (" \ t "))' Ihnen einen Indexfehler gibt, liegt das daran, dass Ihre Zeichenfolge nicht '\ t' enthält. Es wird nicht verursacht durch ** den Gleichheitsoperator. – khelwood
s enthält "\ t", weil ich auch während des Debuggens Schritt für Schritt auf seinen Wert schaue, und das sieht man in der Anweisung String subjectName = subject.getName() + "\ t" + 0; Ich habe "\ t" hinzugefügt. – Taivna
Dann ist es eine andere Zeile, die die Ausnahme auslöst. – khelwood