2013-06-07 38 views

Trả lời

50

Sử dụng cụm từ thông dụng \s++$, bạn có thể thay thế tất cả ký tự dấu cách (bao gồm dấu cách và ký tự tab) mà không có gì ("").

final String text = " foo "; 
System.out.println(text.replaceFirst("\\s++$", "")); 

Output

foo 

Online demo.

Dưới đây là một phân tích về regex:

  • \s – bất kỳ ký tự khoảng trắng,
  • ++ – khớp một hoặc nhiều mã thông báo trước (sở hữu); tức là, khớp một hoặc nhiều ký tự khoảng trắng. Mẫu + được sử dụng trong possessive form++, mất ít thời gian hơn để phát hiện trường hợp khi mẫu không khớp.
  • $ – kết thúc chuỗi.

Do đó, cụm từ thông dụng sẽ khớp với nhiều khoảng trắng vì nó có thể được theo sau trực tiếp bởi phần cuối của chuỗi: nói cách khác, khoảng trắng cuối.

Việc đầu tư vào việc học các cụm từ thông dụng sẽ trở nên có giá trị hơn, nếu bạn cần mở rộng các yêu cầu của mình sau này.

Tài liệu tham khảo

+8

@WChargin Cảm ơn bạn đã cung cấp bảng phân tích cụm từ thông dụng. Tôi nghĩ nhiều người hơn nên theo dõi khách hàng tiềm năng của bạn và cải thiện câu trả lời. –

+2

Không hoạt động với tôi trong java7 – kaspersky

+1

Tại sao '+' lại cần thiết nếu '\ s' loại bỏ bất kỳ khoảng trống nào? – EGHDK

9

tôi sửa đổi bản gốc java.lang.String.trim() phương pháp một chút và nó cũng làm việc:

public String trim(String str) { 
     int len = str.length(); 
     int st = 0; 

     char[] val = str.toCharArray(); 

     while ((st < len) && (val[len - 1] <= ' ')) { 
      len--; 
     } 
     return str.substring(st, len); 
    } 

Test:

Test test = new Test(); 
    String sample = "   Hello World    "; // A String with trailing and leading spaces 
    System.out.println(test.trim(sample) + " // No trailing spaces left"); 

Output:

 Hello World // No trailing spaces left 
3

Câu trả lời thực tế nhất là @ Micha của, Ahmad là ngược lại với những gì bạn muốn để nhưng đây là những gì tôi đã đưa ra trong trường hợp bạn không muốn sử dụng các công cụ quen thuộc hoặc để xem một cách tiếp cận cụ thể.

public String trimEnd(String myString) { 

    for (int i = myString.length() - 1; i >= 0; --i) { 
     if (myString.charAt(i) == ' ') { 
      continue; 
     } else { 
      myString = myString.substring(0, (i + 1)); 
      break; 
     } 
    } 
    return myString; 
} 

Được sử dụng như:

public static void main(String[] args) { 

    String s = " Some text here "; 
    System.out.println(s + "|"); 
    s = trimEnd(s); 
    System.out.println(s + "|"); 
} 

Output:

Some text here | 
Some text here| 
+1

Ý của bạn là "đảo ngược" những gì anh ta muốn? – Ahmad

+1

@Ahmad anh ấy nói, nếu tôi chỉ muốn xóa dấu * dấu *. – ChiefTwoPencils

+1

Ohh. Xin lỗi tôi đã đọc câu hỏi rồi. Cảm ơn đã chỉ ra điều đó. +1 – Ahmad

10

Một lựa chọn khác là sử dụng Apache Commons StringUtils, cụ thể StringUtils.stripEnd

String stripped = StringUtils.stripEnd(" my lousy string "," "); 
+1

xin lỗi, tôi đang sử dụng Android, vì vậy tôi không thể sử dụng nó – kzjfr0

+2

Tôi đồng ý. Tuy nhiên, bạn nên làm cho nó một điểm để gắn thẻ câu hỏi của bạn với 'android' là' android' không phải là 'Java'. –

+1

@TimBender Đây là lỗi của tôi, tôi đã xóa thẻ android vì câu hỏi có vẻ giống Java chung với tôi. Tôi xin lỗi. –

1

Cách tốt nhất theo ý kiến ​​của tôi:

public static String trimEnd(String source) { 
    int pos = source.length() - 1; 
    while ((pos >= 0) && Character.isWhitespace(source.charAt(pos))) { 
     pos--; 
    } 
    pos++; 
    return (pos < source.length()) ? source.substring(0, pos) : source; 
} 

này không bố trí bất kỳ đối tượng tạm thời để thực hiện công việc và nhanh hơn so với sử dụng một biểu thức chính quy. Ngoài ra nó loại bỏ tất cả khoảng trắng, không chỉ là ''.

1

Dưới đây là một phiên bản rất ngắn, hiệu quả và dễ đọc:

public static String trimTrailing(String str) { 
    if (str != null) { 
     for (int i = str.length() - 1; i >= 0; --i) { 
      if (str.charAt(i) != ' ') { 
       return str.substring(0, i + 1); 
      } 
     } 
    } 
    return str; 
} 

Để thay thế cho str.charAt(i) != ' ' bạn cũng có thể sử dụng !Character.isWhitespace(str.charAt(i) nếu bạn muốn sử dụng một định nghĩa rộng hơn về khoảng trắng.

0

Giá trị chuỗi = "Chào mừng bạn đến với java";

Vì vậy, chúng tôi có thể sử dụng

value = value.trim();

+1

OP yêu cầu chỉ xóa dấu cách. – Matt

0

Mã này được thiết kế để được đọc một cách dễ dàng càng tốt bằng cách sử dụng tên mô tả (và tránh biểu thức thông thường).

Nó sử dụng Java 8's Optional vì vậy không phù hợp với mọi người.

public static String removeTrailingWhitspace(String string) { 
    while (hasWhitespaceLastCharacter(string)) { 
     string = removeLastCharacter(string); 
    } 
    return string; 
} 

private static boolean hasWhitespaceLastCharacter(String string) { 
    return getLastCharacter(string) 
      .map(Character::isWhitespace) 
      .orElse(false); 
} 

private static Optional<Character> getLastCharacter(String string) { 
    if (string.isEmpty()) { 
     return Optional.empty(); 
    } 
    return Optional.of(string.charAt(string.length() - 1)); 
} 

private static String removeLastCharacter(String string) { 
    if (string.isEmpty()) { 
     throw new IllegalArgumentException("String must not be empty"); 
    } 
    return string.substring(0, string.length() - 1); 
} 
Các vấn đề liên quan