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

Ich hatte string1.startsWith (string2) verwendet, was im obigen Beispiel false zurückgab, aber jetzt muss ich die Groß- und Kleinschreibung ignorieren, und es gibt keine String.startsWithIgnoreCase() .Java: Entspricht C's strnicmp? (beide startsWith und ignoreCase)

Neben

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

tun, ist es eine effiziente Art und Weise zu sehen, ob string1 mit string2 in Groß- und Kleinschreibung Weg beginnt?

+1

Dank für den anonymen "-1", wer auch immer es gab. –

Antwort

13

Die regionMatches Methode hat einen Fall empfindlicher Parameter.

+0

cool, danke! Ich habe gerade bemerkt, http://www.java2s.com/Code/Java/Data-Type/CaseinsensitivecheckifaStringstartswithaspecifiedprefix.htm, die diesen Ansatz zu übernehmen scheint. –

+0

+1 das war auch neu für mich. –

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

Übrigens sind Sie sicher, dass Sie hier Effizienz brauchen?

+0

Character.toLowerCase() würde alle Unicode-Zeichen behandeln. – bitc

+0

Bin ich sicher, dass ich es brauche: Nein. Aber ich kann in Zukunft, in diesem Fall möchte ich eine Alternative wissen. Ihr Code-Snippet sieht aus wie es von java2s ist (http://www.java2s.com/Code/Java/Data-Type/StartsWithIgnoreCase.htm), zitieren Sie bitte Quellen, und dies behandelt nicht Unicode. –

+0

Natürlich ist es von einem Link genommen. Ich kann den ursprünglichen Link zitieren, ich kann auch 15 verschiedene Versionen davon schreiben, nur um zu zeigen, dass ich es schaffen kann :) Aber so viel Zeit für eine ziemlich nutzlose Frage zu verschwenden, schien zu viel ... dann __chars__ auf JDK sind Unicode , also sollte es mit Unicode umgehen, Dokumentation lesen, bevor man Zeit damit verbringt zu suchen, wenn irgendwo ein einfaches Snippet gemacht wird. – Jack

3

Wie wäre es damit:

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

Sorry aber braucht 'string1.length()> string2.length() && string2.equalsIgnoreCase (string1string (0, string2.length()))' um richtig zu sein –

+1

@ HamzehSoboh, richtig (fast). Danke, dass du es aufgezeigt hast. Ich habe nicht berücksichtigt, dass 'string1string (0, string2.length())' 'IndexOutOfBoundsException' verwirft, wenn' string1.length() = string2.length()' sein. –

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

Ich möchte darauf hinweisen, dass dies keine besonders hilfreiche Antwort ist - ich schlage vor, dass Sie Ihre Antworten etwas ausführlicher erläutern! – Zyerah