Trong Java, tôi có một Chuỗi:
Jamaica
Tôi muốn xóa ký tự đầu tiên của chuỗi và sau đó quay trở lại amaica
Làm thế nào tôi sẽ làm điều này?
Trong Java, tôi có một Chuỗi:
Jamaica
Tôi muốn xóa ký tự đầu tiên của chuỗi và sau đó quay trở lại amaica
Làm thế nào tôi sẽ làm điều này?
Câu trả lời:
Sử dụng substring()
hàm với một đối số 1
để đưa chuỗi con từ vị trí 1 ( sau ký tự đầu tiên) đến cuối chuỗi (để lại đối số thứ hai mặc định cho toàn bộ chiều dài của chuỗi).
"Jamaica".substring(1);
public String removeFirstChar(String s){
return s.substring(1);
}
removeFirst()
.
Sử dụng substring()
và cung cấp cho số ký tự mà bạn muốn cắt từ phía trước.
String value = "Jamaica";
value = value.substring(1);
Trả lời: "amaica"
Sử dụng toán tử ternary Java để nhanh chóng kiểm tra xem nhân vật của bạn có ở đó không trước khi xóa nó. Điều này loại bỏ ký tự đầu chỉ khi nó tồn tại, nếu được truyền một chuỗi trống, trả về chuỗi trống.
String header = "";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);
header = "foobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);
header = "#moobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);
Bản in:
blankstring
foobar
moobar
String a = "Cool";
a = a.replace("o","");
//variable 'a' contains the string "Cl"
String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"
header = header.substring(header.startsWith("#") ? 1 : 0);
header = header.replaceFirst("^#","");
public String removeFirst(String input)
{
return input.substring(1);
}
Điều quan trọng cần hiểu trong Java là Chuỗi là bất biến - bạn không thể thay đổi chúng. Vì vậy, thật vô nghĩa khi nói về việc "loại bỏ một ký tự khỏi chuỗi". Thay vào đó, bạn tạo một chuỗi MỚI chỉ với các ký tự bạn muốn. Các bài đăng khác trong câu hỏi này cung cấp cho bạn nhiều cách để làm điều đó, nhưng điều quan trọng là phải hiểu rằng những điều này không thay đổi chuỗi gốc theo bất kỳ cách nào. Bất kỳ tham chiếu nào bạn có đến chuỗi cũ sẽ tiếp tục tham chiếu đến chuỗi cũ (trừ khi bạn thay đổi chúng để tham chiếu đến một chuỗi khác) và sẽ không bị ảnh hưởng bởi chuỗi mới được tạo.
Điều này có một số ý nghĩa cho hiệu suất. Mỗi lần bạn 'sửa đổi' một chuỗi, bạn thực sự đang tạo một chuỗi mới với tất cả chi phí ngụ ý (cấp phát bộ nhớ và thu gom rác). Vì vậy, nếu bạn muốn thực hiện một loạt các sửa đổi cho một chuỗi và chỉ quan tâm đến kết quả cuối cùng (các chuỗi trung gian sẽ bị chết ngay khi bạn 'sửa đổi' chúng), thay vào đó, có thể có ý nghĩa hơn khi sử dụng StringBuilder hoặc StringBuffer.
Phương thức chuỗi con () trả về một Chuỗi mới có chứa một chuỗi con các ký tự hiện có trong chuỗi này.
Chuỗi con bắt đầu tại chỉ định start
và mở rộng cho ký tự tại index end - 1
.
Nó có hai hình thức. Đầu tiên là
String substring(int FirstIndex)
Ở đây, First Index chỉ định chỉ mục mà chuỗi con sẽ bắt đầu. Biểu mẫu này trả về một bản sao của chuỗi con bắt đầu tại First Index và chạy đến cuối chuỗi gọi.
String substring(int FirstIndex, int endIndex)
Ở đây, First Index chỉ định chỉ mục bắt đầu và end Index chỉ định điểm dừng. Chuỗi trả về chứa tất cả các ký tự từ chỉ mục bắt đầu, cho đến, nhưng không bao gồm, chỉ mục kết thúc.
String str="Amiyo";
// prints substring from index 3
System.out.println("substring is = " + str.substring(3)); // Output "yo'
Tôi đã gặp một tình huống mà tôi phải loại bỏ không chỉ nhân vật đầu tiên (nếu đó là một #
, mà là bộ ký tự đầu tiên.
String myString = ###Hello World
có thể là điểm khởi đầu, nhưng tôi chỉ muốn để giữ Hello World
. điều này có thể được thực hiện như sau.
while (myString.charAt(0) == '#') { // Remove all the # chars in front of the real string
myString = myString.substring(1, myString.length());
}
Đối với trường hợp của OP, thay thế while
bằng if
và nó hoạt động tốt.
Một giải pháp khác, bạn có thể giải quyết vấn đề của mình bằng replaceAll
một số regex ^.{1}
( bản demo regex ) chẳng hạn:
String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica
Phiên bản của tôi loại bỏ ký tự hàng đầu, một hoặc nhiều. Ví dụ: Chuỗi str1 = "01234", khi xóa hàng đầu '0', kết quả sẽ là "1234". Đối với kết quả Chuỗi str2 = "000123" sẽ lại là "123". Và đối với chuỗi str3 = "000" kết quả sẽ là chuỗi rỗng: "". Chức năng như vậy thường hữu ích khi chuyển đổi chuỗi số thành số. Ưu điểm của giải pháp này so với regex (thayTất cả (...)) là chuỗi này nhanh hơn nhiều. Điều này rất quan trọng khi xử lý số lượng lớn Chuỗi.
public static String removeLeadingChar(String str, char ch) {
int idx = 0;
while ((idx < str.length()) && (str.charAt(idx) == ch))
idx++;
return str.substring(idx);
}