2016-03-29 12 views
0

Ich versuche zu überprüfen, ob die Zeichenfolge b enthält 5-stellige Teilzeichenfolge a.Überprüfung, ob ein Teilstring der Länge 5 in einer anderen Zeichenfolge (refaktoriert) ist

Dies funktioniert, ist aber ein wenig chaotisch:

var a = "1eabcde"; 
var b = "12abcde12fg"; 

    for(var i=0; i<a.length; i++){ 
     for(var j=i;j<a.length-i;j++){ 
      if(a.charAt(j) == b.charAt(i) && a.charAt(j+1) == b.charAt(i+1) && a.charAt(j+2) == b.charAt(i+2) && a.charAt(j+3) == b.charAt(i+3) && a.charAt(j+4) == b.charAt(i+4)){ 
       alert("ya"); 
      }        
     } 
    } 

Gibt es noch andere Reiniger Optionen?

+0

Ich bin ein wenig verwirrt, ist das Ergebnis, wenn 1, e, a, b, c, d, e unabhängig von der Reihenfolge in der zweiten Reihe sind? – user2879041

+0

Entschuldigung soll sein, wenn die 5 Zeichen in der gleichen Reihenfolge vorhanden sind, lassen Sie mich bearbeiten * – codemonkey

+0

Sie meinen 'wenn Zeichenfolge a' nicht b – yeya

Antwort

2

können Sie verwenden substring und indexOf:

var a = "1eabcde"; 
var b = "12abcde12fg"; 

for (var i = 0; i <= a.length - 5; i++) { 
    if (b.indexOf(a.substring(i, i + 5)) >= 0) { 
     alert("ya"); 
    } 
} 

(.. Sie a.substr(i, 5) statt a.substring(i, i + 5) nutzen könnten diese beiden Anrufe identisch verhalten)

Beachten Sie, dass, wenn Sie Schleife 0-a.length (wie in Ihr ursprünglicher Code), dann werden alle Suffixe von a der Länge 5 oder weniger in b gesucht.

In einer Hinsicht verhält sich dieser Code nicht wie Ihr Original: Er wird nur einmal für jede übereinstimmende Teilzeichenfolge von a alarmieren, unabhängig davon, wie oft diese bestimmte Teilzeichenfolge in b auftreten kann. Wenn also a = 'abcde' und b = '01abcde23abcde45, würde Ihr ursprünglicher Code zwei Warnungen (eine für jedes Auftreten von 'abcde') Pop-up, während die oben genannten nur einmal warnen. Wenn Sie das ursprüngliche Verhalten wollen, ändern Sie die if einen while wie folgt aus:

for (var i = 0; i <= a.length - 5; i++) { 
    var j = -1; 
    while ((j = b.substring(j+1).indexOf(a.substr(i, 5))) >= 0) { 
     alert("ya"); 
    } 
} 
1

Dies ist die sauberste Ansatz:

var a = "1eabcde"; 
 
var b = "12abcde12fg"; 
 

 
for (var i = 0; i <= a.length - 5; i++) { 
 
    if(b.indexOf(a.substr(i, 5)) > -1) { 
 
     alert("ya"); 
 
    } 
 
}

+0

müssen 5 Zeichen nicht eins – codemonkey

+0

@codemonkey: müssen 5 Zeichen übereinstimmen einzeln oder als Ganzes? Was [** 'b.IndexOf (a)! == -1 '**] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf) tut , ist zu prüfen, ob 'a' eine Teilzeichenfolge von' b' ist. –

+0

Der Originalcode von OP (ohne End-Effekte) sucht nach fünf aufeinanderfolgenden Zeichen von 'a' in' b'. –

Verwandte Themen