Hi there ! Dưới đây là code của em tự giải để làm bài này không biết còn cách nào dễ hiểu mà ngắn hơn không ? đề bài yêu cầu nhập vào chuỗi " daY nHaU HOc " sẽ cho ra “Day Nhau Hoc”. cảm ơn ạ !
cách em làm như này :
1/ method đầu dùng để kiểm tra xem trong chuỗi có 2 khoảng trắng liên tiếp không.
2/ method 2 là nếu có 2 khoảng trắng liên tiếp thì xóa 1 cái đến khi nào method 1 trả về true thì thôi
3/ method 3 là để viết hoa chữ cái đầu tiên của mỗi từ !
nhưng e vẫn thấy code quá dài và không hợp lí cho 1 câu hỏi chỉ có giá trị 1,5 điểm. mong mọi người giúp đỡ
public class StringOptima {
private static boolean kiemTra2KhoangTrangLienKe(String s) {
char[] arr = s.toCharArray();
for (int i = 1; i < arr.length; i++) {
if (arr[i - 1] == ' ' && arr[i] == ' ') {
return false;
}
}
return true;
}
private static String xoaKhoangTrang(String s) {
s = s.trim();
StringBuilder sb = new StringBuilder(s);
while (!kiemTra2KhoangTrangLienKe(sb.toString())) {
for (int i = 1; i < sb.length(); i++) {
if (sb.charAt(i - 1) == ' ' && sb.charAt(i) == ' ') {
sb.deleteCharAt(i);
break;
}
}
}
return sb.toString();
}
private static String inHoaChuCaiDau(String s) {
s = s.toLowerCase();
StringBuilder sb = new StringBuilder(s);
sb.replace(0, 1, (sb.charAt(0) + "").toUpperCase());
for (int i = 1; i < sb.length(); i++) {
if (sb.charAt(i - 1) == ' ') {
sb.replace(i, i + 1, (sb.charAt(i) + "").toUpperCase());
}
}
return sb.toString();
}
public static String toiUuChuoi(String s) {
return inHoaChuCaiDau(xoaKhoangTrang(s));
}
public static void main(String[] args) {
String s = " dAY nHaU hoC ";
System.out.println(toiUuChuoi(s));
// Ket Qua : Day Nhau Hoc
}
}