Đó là một chút "xem xét trước khi bạn bước nhảy vọt", nhưng những gì bạn muốn làm là:
- Kiểm tra vị trí chỉ số của mỗi chuỗi trong vòng khác.
- Nếu (và chỉ khi) vị trí chỉ mục tồn tại, hãy kiểm tra xem chuỗi con từ vị trí chỉ mục đó tất cả các cách đến kết thúc phù hợp với.
- Nếu không, hãy trả về false.
Nếu bạn thực hiện bất kỳ phép trừ nào, bạn sẽ không nhận được kích thước chính xác của chuỗi con; nghĩa là, nếu bạn trừ độ dài của chuỗi bạn đang kiểm tra, bạn sẽ chỉ nhận được một ký tự.
public static boolean startOther(String left, String right) {
if (left == null || right == null || left.equals(right)) {
return false;
}
int rightSubstringInLeft = left.indexOf(right);
int leftSubstringInRight = right.indexOf(left);
if(rightSubstringInLeft != -1) {
return left.substring(rightSubstringInLeft).equals(right);
} else if(leftSubstringInRight != -1) {
return right.substring(leftSubstringInRight).equals(left);
} else {
return false;
}
}
Dưới đây là hình thức được tối ưu hóa nhiều hơn của cùng một mã, như được nêu trong các nhận xét. Về cơ bản nó là như nhau, nhưng bạn không cần phải thực hiện một bằng kiểm tra trên chuỗi con, vì lastIndexOf
sẽ chỉ bao giờ cung cấp cho bạn chỉ mục cuối cùng của toàn bộ chuỗi con.
public static boolean startOther(String left, String right) {
if (left == null || right == null || left.equals(right)) {
return false;
}
int rightSubstringInLeft = left.lastIndexOf(right);
int leftSubstringInRight = right.lastIndexOf(left);
if(rightSubstringInLeft != -1) {
return rightSubstringInLeft == left.length() - right.length();
} else if(leftSubstringInRight != -1) {
return leftSubstringInRight == right.length() - left.length();
} else {
return false;
}
}
Gợi ý: http://docs.oracle.com/javase/7/docs/api/java/lang/String. html # endsWith% 28java.lang.String% 29 –
Về lỗi: nếu không chứa b, pos là -1, và do đó bạn đang thực hiện a.substring (len + 1), do đó sẽ yêu cầu lập chỉ mục ngoài giới hạn của chuỗi. Một trình gỡ lỗi sẽ cho thấy ngay lập tức. Bạn nên học cách sử dụng nó. –