Tôi muốn sử dụng string.startsWith()
phương pháp nhưng bỏ qua trường hợp.
Giả sử tôi có String
"Session" và tôi sử dụng startsWith
trên "sEsSi" thì nó sẽ trả về true
.
Làm thế nào tôi có thể đạt được điều này?
Tôi muốn sử dụng string.startsWith()
phương pháp nhưng bỏ qua trường hợp.
Giả sử tôi có String
"Session" và tôi sử dụng startsWith
trên "sEsSi" thì nó sẽ trả về true
.
Làm thế nào tôi có thể đạt được điều này?
Câu trả lời:
Sử dụng toUpperCase()
hoặc toLowerCase()
để chuẩn hóa chuỗi của bạn trước khi kiểm tra nó.
String.equalsIgnoreCase()
bạn sẽ phát hiện ra rằng bạn cần phải so sánh cả phiên bản viết thường và viết hoa của Chuỗi trước khi bạn có thể trả về một cách chắc chắn false
. Xem stackoverflow.com/a/38947571/14731 để có câu trả lời thay thế.
"İstanbul".toLowerCase().startsWith("istanbul".toLowerCase())
(trong môi trường Locale.Turkish), nó sẽ cho tôi sai.
Một tùy chọn là chuyển đổi cả hai thành chữ thường hoặc chữ hoa:
"Session".toLowerCase().startsWith("sEsSi".toLowerCase());
Cái này sai. Xem: https://stackoverflow.com/a/15518878/14731
Một tùy chọn khác là sử dụng String#regionMatches()
phương thức, phương thức này nhận đối số boolean cho biết có thực hiện đối sánh phân biệt chữ hoa chữ thường hay không. Bạn có thể sử dụng nó như thế này:
String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5)); // true
Nó kiểm tra xem vùng needle
từ chỉ mục 0
đến độ dài 5
có xuất hiện trong haystack
bắt đầu từ chỉ mục 0
đến độ dài 5
hay không. Đối số đầu tiên là true
, có nghĩa là nó sẽ thực hiện đối sánh không phân biệt chữ hoa chữ thường.
Và chỉ cần bạn là một fan hâm mộ lớn của Regex , bạn có thể làm những điều như sau:
System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));
(?i)
cờ nhúng là để bỏ qua đối sánh chữ hoa và chữ thường.
System.out.println("Session".toLowerCase().startsWith("sEsSi".toLowerCase()));
không phải là một giải pháp chuyên nghiệp. Bạn có thể thử cách này: System.out.println("SessIon".toLowerCase().startsWith("sEsSi".toLowerCase()));
với các đối số vm -Duser.country=TR -Duser.language=tr
Trong ví dụ I
này là chữ hoai
thử cái này,
String session = "Session";
if(session.toLowerCase().startsWith("sEsSi".toLowerCase()))
Tôi biết mình đến muộn, nhưng còn việc sử dụng StringUtils.startsWithIgnoreCase () từ Apache Commons Lang 3 thì sao?
Thí dụ :
StringUtils.startsWithIgnoreCase(string, "start");
Chỉ cần thêm phần phụ thuộc sau vào tệp pom.xml của bạn (lấy giả thuyết rằng bạn sử dụng Maven):
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
Bạn có thể dùng someString.toUpperCase().startsWith(someOtherString.toUpperCase())
string.regionMatches(true, 0, prefix, 0, prefix.length());
mà không phải chịu chi phí "bình thường hóa" cả hai chuỗi.