Java - xóa ký tự đầu tiên của chuỗi


215

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:


341

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);

21
Điều quan trọng cần lưu ý là điều này không thực sự loại bỏ ký tự khỏi chuỗi - nó cung cấp cho bạn một chuỗi mới có tất cả các ký tự của chuỗi cũ ngoại trừ chuỗi đầu tiên. Không có cách nào để thực sự sửa đổi một chuỗi.
Chris Dodd

Các liên kết dường như không còn hiệu lực. Thay vào đó, hãy thử liên kết sau: chuỗi con (int)
Christian Hoffmann

1
Vâng, nếu bạn muốn loại bỏ n ký tự đầu tiên của biến chuỗi, bạn thực hiện việc này: biến = biến.sub chuỗi (n);
Mitulát Bati

67
public String removeFirstChar(String s){
   return s.substring(1);
}

12
Nếu bạn định xác định một chức năng mới, ít nhất hãy chọn một tên phù hợp như thế removeFirst().
moinudin

55

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"


47

Trong Java, chỉ xóa ký tự đầu nếu nó là một ký tự nhất định

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

Java, xóa tất cả các thể hiện của một ký tự ở bất cứ đâu trong chuỗi:

String a = "Cool";
a = a.replace("o","");
//variable 'a' contains the string "Cl"

Java, xóa phiên bản đầu tiên của một ký tự ở bất cứ đâu trong chuỗi:

String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"

4
DRY:header = header.substring(header.startsWith("#") ? 1 : 0);
Aaron Blenkush

3
Hoặc với regex:header = header.replaceFirst("^#","");
Aaron Blenkush

18

Bạn có thể sử dụng phương thức chuỗi con của Stringlớp chỉ lấy chỉ mục bắt đầu và trả về chuỗi con bắt đầu bằng ký tự ở chỉ mục đã chỉ định và kéo dài đến cuối chuỗi.

String str = "Jamaica";
str = str.substring(1);


11

Đ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.


9

bạn có thể làm như thế này:

String str="Jamaica";
str=str.substring(1, title.length());
return str;

hoặc nói chung:

public String removeFirstChar(String str){
   return str.substring(1, title.length());
}

8

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 startvà mở rộng cho ký tự tại index end - 1.

Nó có hai hình thức. Đầu tiên là

  1. 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.

  1. 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.

Thí dụ

    String str="Amiyo";
   // prints substring from index 3
   System.out.println("substring is = " + str.substring(3)); // Output "yo'

4

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 Worldcó 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ế whilebằng ifvà nó hoạt động tốt.


1
Sẽ có vấn đề nếu myString == "#" vì Chuỗi sẽ bị giới hạn tại một số điểm. Để ngăn chặn điều này, bạn có thể làm (! MyString.isEmpty () && myString.charAt (0))
Christian

2

Một giải pháp khác, bạn có thể giải quyết vấn đề của mình bằng replaceAllmột số regex ^.{1}( bản demo regex ) chẳng hạn:

String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica

1

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);
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.