2010-04-08 20 views
8
String string1 = "abCdefGhijklMnopQrstuvwYz"; 
String string2 = "ABC"; 

Tôi đã sử dụng string1.startsWith (string2), sẽ trả về false trong ví dụ trên, nhưng bây giờ tôi cần phải bỏ qua trường hợp nhạy cảm, và không có String.startsWithIgnoreCase() .Java: tương đương với strnicmp của C? (cả hai startWith và ignoreCase)

Bên cạnh làm

string1.toLowerCase.startsWith(string2.toLowerCase()); 

là có một cách hiệu quả để xem nếu string1 bắt đầu với chuỗi2 một cách case-insensitive?

+1

cảm ơn cho vô danh "-1", bất cứ ai đưa nó. –

Trả lời

13

Phương pháp regionMatches có một tham số nhạy cảm như vậy.

+0

tuyệt vời, cảm ơn! Tôi chỉ nhận thấy http://www.java2s.com/Code/Java/Data-Type/CaseinsensitivecheckifaStringstartswithaspecifiedprefix.htm mà dường như có cách tiếp cận này. –

+0

+1 điều này cũng mới đối với tôi. –

0
public static boolean startsWithIgnoreCase(String s, String w) 
    { 
     if (w==null) 
      return true; 

     if (s==null || s.length()<w.length()) 
      return false; 

     for (int i=0;i<w.length();i++) 
     { 
      char c1=s.charAt(i); 
      char c2=w.charAt(i); 
      if (c1!=c2) 
      { 
       if (c1<=127) 
        c1=Character.toLowerCase(c1); 
       if (c2<=127) 
        c2=Character.toLowerCase(c2); 
       if (c1!=c2) 
        return false; 
      } 
     } 
     return true; 
    } 

Bằng cách này bạn có chắc là bạn cần hiệu quả ở đây không?

+0

Character.toLowerCase() sẽ xử lý tất cả các charicers unicode. – bitc

+0

Tôi chắc rằng tôi cần nó: không. Nhưng tôi có thể trong tương lai, trong trường hợp đó tôi muốn biết một giải pháp thay thế. Đoạn mã của bạn có vẻ như là từ java2s (http://www.java2s.com/Code/Java/Data-Type/StartsWithIgnoreCase.htm), vui lòng trích dẫn nguồn và điều này không xử lý Unicode. –

+0

Tất nhiên nó được lấy từ một liên kết. Tôi có thể trích dẫn các liên kết ban đầu, tôi cũng có thể viết 15 phiên bản khác nhau của nó chỉ để hiển thị tôi có thể làm điều đó :) Nhưng lãng phí rất nhiều thời gian cho một câu hỏi khá vô dụng dường như quá nhiều .. sau đó __chars__ trên JDK là unicode , vì vậy nó sẽ xử lý unicode, đọc tài liệu trước khi dành thời gian tìm kiếm nếu một đoạn mã đơn giản được thực hiện ở đâu đó. – Jack

3

Làm thế nào về điều này:

string2.equalsIgnoreCase(string1.substring(0, string2.length()) 
+1

Xin lỗi nhưng cần 'string1.length()> string2.length() && string2.equalsIgnoreCase (string1.substring (0, string2.length()))' chính xác –

+1

@HamzehSoboh, đúng (gần như). Cảm ơn đã chỉ ra điều đó. Tôi đã không đưa vào tài khoản mà 'string1.substring (0, string2.length())' ném 'IndexOutOfBoundsException' nếu' string1.length() = string2.length()'. –

2
string.toLowerCase().startsWith(string2.toLowerCase()) 
+0

Tôi có thể chỉ ra đây không phải là câu trả lời đặc biệt hữu ích - tôi khuyên bạn nên mở rộng câu trả lời của mình chi tiết hơn một chút! – Zyerah

Các vấn đề liên quan