boolean (@Nullable CharSequence s1, @Nullable CharSequence s2) { if (s1 == null ^ s2 == null) { return false; } if (s1 == null) { return true; } int len1 = s1.length(); int len2 = s2.length(); int index1 = 0; int index2 = 0; while (index1 < len1 && index2 < len2) { if (s1.charAt(index1) == s2.charAt(index2)) { index1++; index2++; continue; } boolean skipped = false; while (index1 != len1 && isWhiteSpace(s1.charAt(index1))) { skipped = true; index1++; } while (index2 != len2 && isWhiteSpace(s2.charAt(index2))) { skipped = true; index2++; } if (!skipped) return false; } for (; index1 != len1; index1++) { if (!isWhiteSpace(s1.charAt(index1))) return false; } for (; index2 != len2; index2++) { if (!isWhiteSpace(s2.charAt(index2))) return false; } return true; }