indexOf Phân biệt chữ hoa chữ thường?


81

Phương thức indexOf (String) có phân biệt chữ hoa chữ thường không? Nếu vậy, có một phiên bản không phân biệt chữ hoa chữ thường không?


3
Không phải tôi là một người giỏi về hiệu suất hay bất cứ điều gì (tôi thực sự coi việc điều chỉnh hiệu suất là một thứ xấu xa), nhưng .toUpperCase sao chép chuỗi của bạn mỗi khi bạn gọi nó, vì vậy nếu bạn thực hiện điều này trong một vòng lặp, hãy thử di chuyển .toUpperCase ra của vòng lặp nếu có thể.
Bill K

Câu trả lời:


75

Các indexOf()phương pháp này là tất cả các trường hợp nhạy cảm. Bạn có thể làm cho chúng (đại khái, theo một cách gãy gọn, nhưng hoạt động trong nhiều trường hợp) phân biệt chữ hoa chữ thường bằng cách chuyển đổi các chuỗi của bạn thành chữ hoa / thường trước:

s1 = s1.toLowerCase(Locale.US);
s2 = s2.toLowerCase(Locale.US);
s1.indexOf(s2);

4
Hãy cẩn thận với các vấn đề quốc tế hóa (tức là tiếng Thổ Nhĩ Kỳ İ) khi sử dụng toUpperCase. Một giải pháp thích hợp hơn là sử dụng str.toUpperCase (Locale.US) .indexOf (...);
James Van Huis

2
Tôi khá chắc chắn rằng việc chuyển đổi chữ hoa chữ thường và sau đó so sánh không hoàn toàn chính xác theo quy tắc so sánh Unicode. Nó hoạt động đối với một số thứ (cụ thể là gấp chữ hoa, thường chỉ được sử dụng trong ngữ cảnh phân tích cú pháp) nhưng đối với ngôn ngữ tự nhiên, có thể có những trường hợp đặc biệt trong đó hai chuỗi có thể so sánh bằng nhau không, dưới cả chữ hoa hoặc cả chữ thường. Tuy nhiên, tôi không thể đưa ra bất kỳ ví dụ nào.
nielsm

7
Sẽ không hiệu quả. Một số ký tự quốc tế, kỳ lạ được chuyển đổi thành nhiều ký tự khi chuyển đổi thành chữ thường / hoa. Ví dụ:"ß".toUpperCase().equals("SS")
Simon

ß hầu như không phải là một ký tự kỳ lạ và nó cũng không mang tính quốc tế, chỉ được sử dụng ở Đức và Áo. Nhưng có, điều này cũng tốt như nó nhận được nhưng không thực sự là một so sánh không phân biệt chữ hoa chữ thường, như nielsm đã chỉ ra ba năm trước.
Joey

Không hoạt động với unicode Thổ Nhĩ Kỳ, điều đó đến trực tiếp từ email của ai đó.
Alexander Pogrebnyak

43

Phương thức indexOf (String) có phân biệt chữ hoa chữ thường không?

Có, nó phân biệt chữ hoa chữ thường:

@Test
public void indexOfIsCaseSensitive() {
    assertTrue("Hello World!".indexOf("Hello") != -1);
    assertTrue("Hello World!".indexOf("hello") == -1);
}

Nếu vậy, có một phiên bản không phân biệt chữ hoa chữ thường không?

Không, không có. Bạn có thể chuyển đổi cả hai chuỗi thành chữ thường trước khi gọi indexOf:

@Test
public void caseInsensitiveIndexOf() {
    assertTrue("Hello World!".toLowerCase().indexOf("Hello".toLowerCase()) != -1);
    assertTrue("Hello World!".toLowerCase().indexOf("hello".toLowerCase()) != -1);
}

8
ồ xin vui lòng làm ơn đừng quên sử dụng tính năng chuyển đổi bất biến văn hóa với Locale.US, chúng tôi đã gặp đủ vấn đề với các ứng dụng java chạy theo ngôn ngữ Thổ Nhĩ Kỳ.
idursun 14/07/09

@idursun - buộc sang ngôn ngữ Hoa Kỳ không giải quyết được vấn đề, vì nó vẫn không hoạt động đối với các chuỗi thực sự chứa các ký tự có vấn đề bắt đầu (ví dụ: "ı".toLowerCase(Locale.US).indexOf("I".toLowerCase(Locale.US))phải trả về 0 vì chuỗi đầu tiên là chữ thường tiếng Thổ Nhĩ Kỳ "I", và do đó nên so sánh bằng với chữ hoa "I"trong chữ thứ hai, nhưng trả về -1 vì chữ sau được chuyển đổi thành "i").
Jules

20

Có một phương thức bỏ qua trường hợp trong lớp StringUtils của thư viện Apache Commons Lang

indexOfIgnoreCase (CharSequence str, CharSequence searchStr)


Đây phải là câu trả lời được chấp nhận, vì câu trả lời hiện tại không hoạt động đối với một số chuỗi không phải ascii có chứa các ký tự điều khiển unicode. Ví dụ: điều này phù hợp với văn bản được viết bằng tiếng Thổ Nhĩ Kỳ. Phía sau Apache sử dụng regionMatches và điều đó hoạt động.
Alexander Pogrebnyak

17

Có, indexOfcó phân biệt chữ hoa chữ thường.

Cách tốt nhất để xử lý trường hợp không phân biệt mà tôi đã tìm thấy là:

String original;
int idx = original.toLowerCase().indexOf(someStr.toLowerCase());

Điều đó sẽ không phân biệt chữ hoa chữ thường indexOf().


2
Đừng bao giờ làm điều đó. Lý do là, original.toLowerCase().length()không phải lúc nào cũng bằng original.length(). Kết quả idxlà không thể ánh xạ lại một cách chính xác original.
Cheok Yan Cheng

14

Đây là giải pháp của tôi không cấp phát bất kỳ bộ nhớ heap nào, do đó nó sẽ nhanh hơn đáng kể so với hầu hết các triển khai khác được đề cập ở đây.

public static int indexOfIgnoreCase(final String haystack,
                                    final String needle) {
    if (needle.isEmpty() || haystack.isEmpty()) {
        // Fallback to legacy behavior.
        return haystack.indexOf(needle);
    }

    for (int i = 0; i < haystack.length(); ++i) {
        // Early out, if possible.
        if (i + needle.length() > haystack.length()) {
            return -1;
        }

        // Attempt to match substring starting at position i of haystack.
        int j = 0;
        int ii = i;
        while (ii < haystack.length() && j < needle.length()) {
            char c = Character.toLowerCase(haystack.charAt(ii));
            char c2 = Character.toLowerCase(needle.charAt(j));
            if (c != c2) {
                break;
            }
            j++;
            ii++;
        }
        // Walked all the way to the end of the needle, return the start
        // position that this was found.
        if (j == needle.length()) {
            return i;
        }
    }

    return -1;
}

Và đây là các bài kiểm tra đơn vị để xác minh hành vi đúng.

@Test
public void testIndexOfIgnoreCase() {
    assertThat(StringUtils.indexOfIgnoreCase("A", "A"), is(0));
    assertThat(StringUtils.indexOfIgnoreCase("a", "A"), is(0));
    assertThat(StringUtils.indexOfIgnoreCase("A", "a"), is(0));
    assertThat(StringUtils.indexOfIgnoreCase("a", "a"), is(0));

    assertThat(StringUtils.indexOfIgnoreCase("a", "ba"), is(-1));
    assertThat(StringUtils.indexOfIgnoreCase("ba", "a"), is(1));

    assertThat(StringUtils.indexOfIgnoreCase("Royal Blue", " Royal Blue"), is(-1));
    assertThat(StringUtils.indexOfIgnoreCase(" Royal Blue", "Royal Blue"), is(1));
    assertThat(StringUtils.indexOfIgnoreCase("Royal Blue", "royal"), is(0));
    assertThat(StringUtils.indexOfIgnoreCase("Royal Blue", "oyal"), is(1));
    assertThat(StringUtils.indexOfIgnoreCase("Royal Blue", "al"), is(3));
    assertThat(StringUtils.indexOfIgnoreCase("", "royal"), is(-1));
    assertThat(StringUtils.indexOfIgnoreCase("Royal Blue", ""), is(0));
    assertThat(StringUtils.indexOfIgnoreCase("Royal Blue", "BLUE"), is(6));
    assertThat(StringUtils.indexOfIgnoreCase("Royal Blue", "BIGLONGSTRING"), is(-1));
    assertThat(StringUtils.indexOfIgnoreCase("Royal Blue", "Royal Blue LONGSTRING"), is(-1));  
}

Làm thế nào để trả lời câu hỏi này ??
Chất lượng Catalyst

7
Câu trả lời là "không, không có phiên bản indexOf không phân biệt chữ hoa chữ thường". Tuy nhiên, tôi đã thêm giải pháp ở đây vì mọi người sẽ tìm trang này để tìm giải pháp. Tôi đã cung cấp giải pháp của mình với các trường hợp thử nghiệm để người tiếp theo có thể sử dụng mã của tôi để giải quyết chính xác vấn đề tương tự. Đó là lý do tại sao tràn ngăn xếp rất hữu ích phải không? Tôi có một thập kỷ kinh nghiệm viết mã hiệu suất cao, một nửa trong số đó là tại google. Tôi vừa cung cấp miễn phí một giải pháp đã được thử nghiệm tốt để giúp đỡ cộng đồng.
Zach Vorhies

3
Đây chính xác là điều tôi quan tâm. Tôi thấy nó nhanh hơn khoảng 10-15% so với phiên bản Apache Commons. Nếu tôi có thể ủng hộ nó nhiều lần nữa, tôi sẽ. Cảm ơn!
Jeff Williams

Cảm ơn Jeff, tôi rất vui vì nó đã mang lại cho bạn rất nhiều giá trị. Có những người khác đang khuyến nghị rằng bài đăng này cung cấp một giải pháp đi lên hàng đầu. Nếu ai đó thích mã của tôi thì tôi khiêm tốn yêu cầu bạn ủng hộ giải pháp này.
Zach Vorhies

2
Đây là một trường hợp thử nghiệm bị thiếu:assertThat(StringUtils.indexOfIgnoreCase("ı" /* Turkish lower-case I, U+0131 */, "I"), is(0));
Jules

10

Có, nó phân biệt chữ hoa chữ thường. Bạn có thể phân biệt chữ hoa chữ thường indexOfbằng cách chuyển đổi cả hai tham số String và String thành chữ hoa trước khi tìm kiếm.

String str = "Hello world";
String search = "hello";
str.toUpperCase().indexOf(search.toUpperCase());

Lưu ý rằng toUpperCase có thể không hoạt động trong một số trường hợp. Ví dụ:

String str = "Feldbergstraße 23, Mainz";
String find = "mainz";
int idxU = str.toUpperCase().indexOf (find.toUpperCase ());
int idxL = str.toLowerCase().indexOf (find.toLowerCase ());

idxU sẽ là 20, điều này là sai! idxL sẽ là 19, chính xác. Nguyên nhân gây ra sự cố là tha toUpperCase () chuyển đổi ký tự "ß" thành HAI ký tự, "SS" và điều này làm tắt chỉ mục.

Do đó, hãy luôn gắn bó với toLowerCase ()


1
Gắn với chữ thường không giúp ích gì: nếu bạn thay đổi findthành "STRASSE", nó hoàn toàn không tìm thấy nó trong biến thể chữ thường, nhưng lại tìm thấy nó một cách chính xác trong phiên bản chữ hoa.
Jules

3

Bạn đang làm gì với giá trị chỉ mục khi được trả về?

Nếu bạn đang sử dụng nó để thao tác chuỗi của mình, thì bạn có thể không sử dụng một biểu thức chính quy được không?

import static org.junit.Assert.assertEquals;    
import org.junit.Test;

public class StringIndexOfRegexpTest {

    @Test
    public void testNastyIndexOfBasedReplace() {
        final String source = "Hello World";
        final int index = source.toLowerCase().indexOf("hello".toLowerCase());
        final String target = "Hi".concat(source.substring(index
                + "hello".length(), source.length()));
        assertEquals("Hi World", target);
    }

    @Test
    public void testSimpleRegexpBasedReplace() {
        final String source = "Hello World";
        final String target = source.replaceFirst("(?i)hello", "Hi");
        assertEquals("Hi World", target);
    }
}

Ngạc nhiên bởi sự thiếu ủng hộ ở đây. Trong một trang bị chi phối bởi các câu trả lời sai, đây là một trong ba trang duy nhất thực sự hoạt động chính xác.
Jules

2

Tôi vừa xem nguồn. Nó so sánh các ký tự nên phân biệt chữ hoa chữ thường.


2
@Test
public void testIndexofCaseSensitive() {
    TestCase.assertEquals(-1, "abcDef".indexOf("d") );
}

Đây thậm chí không trả lời đầy đủ các question..it thậm chí không nói nếu thử nghiệm đi ....
jjnguy

2
Bạn nói đúng tôi không, tôi đã kinda hy vọng rằng nó sẽ nhắc nhở người hỏi ban đầu để chạy thử nghiệm anh / mình, và có thể nhận được vào các thói quen
Paul McKenzie

2
Chà, điều đó cũng được ... nhưng tôi cho rằng sẽ tốt hơn nếu bỏ phiếu cho một câu hỏi thực sự đưa ra câu trả lời hơn là một bài kiểm tra. StackOverflow đang cố gắng trở thành một kho lưu trữ mã Q và A. Vì vậy, câu trả lời đầy đủ sẽ là tốt nhất.
jjnguy 14/07/09

1
@jjnguy: Tôi luôn có ấn tượng rằng những người đăng bài kiểm tra, đăng bài kiểm tra đều đạt. @dfa đã làm một điều tương tự. (Nhưng câu trả lời của @ dfa đầy đủ hơn).
Tom,

Nhưng anh ấy cũng đăng một số từ (mô tả) ... Những từ đó thường hữu ích.
jjnguy 14/07/09

2

Vâng, tôi khá chắc chắn là như vậy. Một phương pháp giải quyết vấn đề đó bằng cách sử dụng thư viện chuẩn sẽ là:

int index = str.toUpperCase().indexOf("FOO"); 

2

Có cùng một vấn đề. Tôi đã thử biểu thức chính quy và apache StringUtils.indexOfIgnoreCase-Method, nhưng cả hai đều khá chậm ... Vì vậy, tôi đã tự viết một phương thức ngắn ...:

public static int indexOfIgnoreCase(final String chkstr, final String searchStr, int i) {
    if (chkstr != null && searchStr != null && i > -1) {
          int serchStrLength = searchStr.length();
          char[] searchCharLc = new char[serchStrLength];
          char[] searchCharUc = new char[serchStrLength];
          searchStr.toUpperCase().getChars(0, serchStrLength, searchCharUc, 0);
          searchStr.toLowerCase().getChars(0, serchStrLength, searchCharLc, 0);
          int j = 0;
          for (int checkStrLength = chkstr.length(); i < checkStrLength; i++) {
                char charAt = chkstr.charAt(i);
                if (charAt == searchCharLc[j] || charAt == searchCharUc[j]) {
                     if (++j == serchStrLength) {
                           return i - j + 1;
                     }
                } else { // faster than: else if (j != 0) {
                         i = i - j;
                         j = 0;
                    }
              }
        }
        return -1;
  }

Theo thử nghiệm của tôi, nó nhanh hơn nhiều ... (ít nhất là nếu chuỗi tìm kiếm của bạn khá ngắn). Nếu bạn có bất kỳ đề xuất nào để cải thiện hoặc có lỗi, rất vui nếu bạn cho tôi biết ... (vì tôi sử dụng mã này trong một ứng dụng ;-)


Điều này thực sự rất thông minh, vì chuỗi tìm kiếm sẽ ngắn hơn đáng kể so với văn bản cần tìm kiếm và nó chỉ tạo ra phiên bản viết hoa và viết thường của chuỗi tìm kiếm. Cảm ơn vì điều đó!
fiffy

Điều này chậm hơn đáng kể so với phiên bản StringUtils trong thử nghiệm của tôi. Tuy nhiên, câu trả lời của Zach giống như nhanh hơn 10-15%.
Jeff Williams

Giải pháp này nhanh hơn khoảng 10% so với giải pháp được đưa ra bởi Zach Vorhies. Cảm ơn bạn cho giải pháp này.
gogognome

Giải pháp này không tạo ra câu trả lời chính xác khi có các chuỗi thay đổi độ dài khi chuyển đổi thành chữ hoa (ví dụ: nếu bạn tìm kiếm "ß", nó sẽ tìm thấy nó trong bất kỳ chuỗi nào có chứa một chữ "S") hoặc cho văn bản sử dụng cách viết hoa thay thế (ví dụ: indexOfIgnoreCase("İ","i")nên trả về 0 vì İcách viết hoa chính xác của ivăn bản tiếng Thổ Nhĩ Kỳ, nhưng thay vào đó trả về -1 vì iđược viết hoa phổ biến hơn I).
Jules

1

Câu hỏi đầu tiên đã được trả lời nhiều lần. Có, String.indexOf()tất cả các phương pháp đều phân biệt chữ hoa chữ thường.

Nếu bạn cần một ngôn ngữ nhạy cảm, indexOf()bạn có thể sử dụng Collator . Tùy thuộc vào giá trị cường độ bạn đặt, bạn có thể nhận được so sánh không phân biệt chữ hoa chữ thường và cũng coi các chữ cái có dấu giống như chữ cái không dấu, v.v. Dưới đây là một ví dụ về cách thực hiện điều này:

private int indexOf(String original, String search) {
    Collator collator = Collator.getInstance();
    collator.setStrength(Collator.PRIMARY);
    for (int i = 0; i <= original.length() - search.length(); i++) {
        if (collator.equals(search, original.substring(i, i + search.length()))) {
            return i;
        }
    }
    return -1;
}

Ngạc nhiên bởi sự thiếu ủng hộ ở đây. Trong một trang bị chi phối bởi các câu trả lời sai, đây là một trong ba trang duy nhất thực sự hoạt động chính xác.
Jules

1

Tóm lại, 3 giải pháp:

  • sử dụng toLowerCase () hoặc toUpperCase
  • sử dụng StringUtils của apache
  • sử dụng regex

Bây giờ, những gì tôi đã tự hỏi là cái nào là nhanh nhất? Tôi đoán trung bình là cái đầu tiên.


0

Nhưng không khó để viết một:

public class CaseInsensitiveIndexOfTest extends TestCase {
    public void testOne() throws Exception {
        assertEquals(2, caseInsensitiveIndexOf("ABC", "xxabcdef"));
    }

    public static int caseInsensitiveIndexOf(String substring, String string) {
        return string.toLowerCase().indexOf(substring.toLowerCase());
    }
}

Như đã nhận xét ở trên, điều này không thể xác định chính xác đó "ı"là biến thể viết thường (không phải là biến thể mặc định trong hầu hết các ngôn ngữ) của "I". Hoặc cách khác, nếu chạy trên một máy được đặt thành ngôn ngữ "ı" mặc định, nó sẽ không nhận thấy rằng đó "i"cũng là một biến thể chữ thường của "I".
Jules

0

Chuyển đổi cả hai chuỗi thành chữ thường thường không phải là vấn đề lớn nhưng sẽ rất chậm nếu một số chuỗi dài. Và nếu bạn làm điều này trong một vòng lặp thì nó sẽ thực sự tồi tệ. Vì lý do này, tôi muốn giới thiệu indexOfIgnoreCase.


0
 static string Search(string factMessage, string b)
        {

            int index = factMessage.IndexOf(b, StringComparison.CurrentCultureIgnoreCase);
            string line = null;
            int i = index;
            if (i == -1)
            { return "not matched"; }
            else
            {
                while (factMessage[i] != ' ')
                {
                    line = line + factMessage[i];
                    i++;
                }

                return line;
            }

        }

1
Có vẻ như nó có thể là C #
weston

0

Đây là một phiên bản gần giống với phiên bản StringUtils của Apache:

public int indexOfIgnoreCase(String str, String searchStr) {
    return indexOfIgnoreCase(str, searchStr, 0);
}

public int indexOfIgnoreCase(String str, String searchStr, int fromIndex) {
    // /programming/14018478/string-contains-ignore-case/14018511
    if(str == null || searchStr == null) return -1;
    if (searchStr.length() == 0) return fromIndex;  // empty string found; use same behavior as Apache StringUtils
    final int endLimit = str.length() - searchStr.length() + 1;
    for (int i = fromIndex; i < endLimit; i++) {
        if (str.regionMatches(true, i, searchStr, 0, searchStr.length())) return i;
    }
    return -1;
}

0

Tôi muốn đưa ra yêu cầu đối với giải pháp DUY NHẤT và duy nhất được đăng cho đến nay thực sự hoạt động. :-)

Ba lớp của các vấn đề phải được xử lý.

  1. Quy tắc đối sánh không bắc cầu cho chữ thường và chữ hoa. Vấn đề tiếng Thổ Nhĩ Kỳ I đã được đề cập thường xuyên trong các bài trả lời khác. Theo nhận xét trong nguồn Android cho String.regionMatches, các quy tắc so sánh của Georgia yêu cầu chuyển đổi bổ sung thành chữ thường khi so sánh để có bình đẳng phân biệt chữ hoa chữ thường.

  2. Các trường hợp mà dạng viết hoa và viết thường có số lượng chữ cái khác nhau. Khá nhiều giải pháp đã đăng cho đến nay đều thất bại, trong những trường hợp này. Ví dụ: STRASSE của Đức và Straße có bằng nhau không phân biệt chữ hoa chữ thường, nhưng có độ dài khác nhau.

  3. Độ mạnh ràng buộc của các ký tự có dấu. Ngôn ngữ VÀ hiệu ứng ngữ cảnh cho dù trọng âm có khớp hay không. Trong tiếng Pháp, dạng viết hoa của 'é' là 'E', mặc dù có một xu hướng sử dụng trọng âm hoa. Trong tiếng Pháp Canada, dạng viết hoa của 'é' là 'É', không có ngoại lệ. Người dùng ở cả hai quốc gia sẽ mong đợi "e" khớp với "é" khi tìm kiếm. Các ký tự có dấu và không có dấu có khớp với nhau theo ngôn ngữ cụ thể hay không. Bây giờ hãy xem xét: "E" có bằng "É" không? Đúng. Nó có. Bằng tiếng Pháp, dù sao.

Tôi hiện đang sử dụng android.icu.text.StringSearchđể triển khai chính xác các triển khai trước đây của các hoạt động indexOf không phân biệt chữ hoa chữ thường.

Người dùng không phải Android có thể truy cập cùng một chức năng thông qua gói ICU4J, sử dụng com.ibm.icu.text.StringSearchlớp.

Hãy cẩn thận tham chiếu các lớp trong gói icu chính xác ( android.icu.texthoặc com.ibm.icu.text) vì Android và JRE đều có các lớp có cùng tên trong các không gian tên khác (ví dụ: Collator).

    this.collator = (RuleBasedCollator)Collator.getInstance(locale);
    this.collator.setStrength(Collator.PRIMARY);

    ....

    StringSearch search = new StringSearch(
         pattern,
         new StringCharacterIterator(targetText),
         collator);
    int index = search.first();
    if (index != SearchString.DONE)
    {
        // remember that the match length may NOT equal the pattern length.
        length = search.getMatchLength();
        .... 
    }

Các trường hợp thử nghiệm (Ngôn ngữ, mẫu, văn bản đích, kết quả mong đợi):

    testMatch(Locale.US,"AbCde","aBcDe",true);
    testMatch(Locale.US,"éèê","EEE",true);

    testMatch(Locale.GERMAN,"STRASSE","Straße",true);
    testMatch(Locale.FRENCH,"éèê","EEE",true);
    testMatch(Locale.FRENCH,"EEE","éèê",true);
    testMatch(Locale.FRENCH,"éèê","ÉÈÊ",true);

    testMatch(new Locale("tr-TR"),"TITLE","tıtle",true);  // Turkish dotless I/i
    testMatch(new Locale("tr-TR"),"TİTLE","title",true);  // Turkish dotted I/i
    testMatch(new Locale("tr-TR"),"TITLE","title",false);  // Dotless-I != dotted i.

Tái bút: Tốt nhất tôi có thể xác định, độ mạnh ràng buộc CHÍNH nên làm đúng khi các quy tắc theo ngôn ngữ cụ thể phân biệt giữa các ký tự có dấu và không trọng âm theo quy tắc từ điển; nhưng tôi không sử dụng ngôn ngữ nào để kiểm tra tiền đề này. Các trường hợp thử nghiệm được tặng sẽ được đánh giá cao.


1
Nếu bạn muốn cấp phép kép cho mã của mình, hãy làm như vậy thông qua một số nền tảng khác và bao gồm một liên kết ở đó. Một khối lượng lớn các câu trả lời hợp lệ được thêm vào cuối mỗi câu trả lời sẽ làm tăng thêm sự lộn xộn nghiêm trọng cho Stack Overflow.
Mudgar

Sau đó, có lẽ bạn nên tìm một cách hiệu quả hơn để giải quyết vấn đề của CC-BY-SA áp dụng cho các đoạn mã,
Robin Davies

Việc xóa các khoản cấp phép mà tôi đã cung cấp cho các đoạn mã mà tôi giữ bản quyền cũng có vẻ không phù hợp.
Robin Davies

-2

indexOf phân biệt chữ hoa chữ thường. Điều này là do nó sử dụng phương thức bằng để so sánh các phần tử trong danh sách. Điều tương tự cũng xảy ra với hàm chứa và loại bỏ.


Câu hỏi ban đầu là về phương thức indexOf của String.
John Topley

Tôi không biết đó là những gì anh ấy đang nói. Tôi đã không nhận ra điều đó cho đến khi người khác nói điều gì đó. Nguyên tắc vẫn giống nhau mặc dù.
Robbie,

2
Không, không phải vậy. Phần trong của phương thức indexOf của String so sánh các ký tự không phải là các đối tượng, vì vậy nó không sử dụng phương thức bằng.
John Topley
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.