2013-06-17 9 views
1

Итак, я бренд, шлепнующий новый JavaScript. Я практикую прямо сейчас с учебником Codeacedemy, и мне пришлось создать программу, которая находит мое имя в строке текста. Но я понял, что если я использую имя, похожее на мое, оно также вернет другое имя. Какой метод я могу использовать или как я могу уточнить код, чтобы он соответствовал точному имени в строке?Строковый метод точный текст

Вот код:

/*jshint multistr:true */ 

var text = "Hello my name is Zachary Sohovich. I'm a 20 year old dude from Southern California and I love to code"; 
var myName = "Zachary"; 
var hits = []; 
for (var i = 0; i < text.length; i++){ 
    if (text[i] == 'Z') { 
     for (var j = i;j < (i + myName.length); j++) { 
      hits.push(text[j]); 
     } 
    } 
} 
if (hits === 0) { 
    console.log("Your name was not found!"); 
} 
else { 
    console.log(hits); 
} 
+2

'if (text.indexOf (myName)! == -1) {/ * имя найдено * /} else {/ * имя не найдено * /}' –

+1

Это то, чему вас учит Академия Кодекса? Если это так, найдите другой учебник. –

+0

Да, это должна быть практика для петель. – Zachary

ответ

4

Вы можете String.split строку на белые пространства, чтобы создать массив слов и затем проверять каждое слово против вашей тестовой строки, тем самым предотвращая совпадения внутри подстроки. (С альтернативным контуром while)

Javascript

var text = "Hello my name is Zachary Sohovich. I'm a 20 year old dude from Southern California and I love to code", 
    myName = "Zachary", 
    hits = 0, 
    array = text.split(/\s/), 
    length = array.length, 
    i = 0; 

while (i < length) { 
    if (myName === array[i]) { 
     hits += 1; 
    } 

    i += 1; 
} 

if (hits === 0) { 
    console.log("Your name was not found!"); 
} else { 
    console.log(hits); 
} 

На jsfiddle

Или, если вы действительно хотите, чтобы весело провести время с проверкой строки с помощью петель, то вы могли бы сделать что-то вроде этого.

Javascript

var text = "Zachary Hello my name is Zachary Sohovich. I'm a 20 year old dude from ZacharySouthern California and I loZacharyve to code Zachary", 
    textLength = text.length, 
    myName = "Zachary", 
    nameLength = myName.length, 
    check = true, 
    hits = 0, 
    i = 0, 
    j; 

while (i < textLength) { 
    if (check) { 
     if (i !== 0) { 
      i += 1; 
     } 

     j = 0; 
     while (j < nameLength) { 
      if (text.charAt(i + j) !== myName.charAt(j)) { 
       break; 
      } 

      j += 1; 
     } 

     if (j === nameLength && (/\s/.test(text.charAt(i + j)) || i + j === textLength)) { 
      hits += 1; 
      i += j; 
     } 
    } 

    i += 1; 
    check = /\s/.test(text.charAt(i)); 
} 

if (hits === 0) { 
    console.log("Your name was not found!"); 
} else { 
    console.log(hits); 
} 

На jsfiddle

Примечание: Есть целый ряд других возможных решений, которые будут делать то же самое для вас.

+0

Хорошо круто спасибо. Я просто начал цикл while, так что это отлично работает! – Zachary

+0

оба не работают на jsfiddle – sergeydyadyul

+0

Оба по-прежнему там и работают на меня, поэтому я не знаю, что не работает для вас? – Xotic750

3

Вам не нужно делать все эти вещи.

Просто найти свое имя с помощью следующего кода

if(text.indexOf(myName) !== -1){ 
    console.log('Found'); 
} 

Если его общее число вхождений вы хотели бы найти

var count = text.match(/Zachary/g).length; 
console.log(count) 
+0

Я предполагаю, что цель состояла в том, чтобы практиковать итерации и массивы :) –

+0

Если это так, вопрос должен быть обрамлен :) – Nagarjun

+0

Нет, это должно быть практика для циклов. Но это помогает благодарить. :) – Zachary

1

Вот моя расширенная версия этого урока.

/*jshint multistr:true */ 
var text = "Anastasius is known to have had a brother named Flavius Paulus, who served \ 
asRoman consul in 496. A sister-in-law, known as Magna, was mother to Irene and \ 
mother-in-law to Olybrius. This Olybrius was son of Anicia Juliana and Areobindus \ 
Dagalaiphus Areobindus. The daughter of Olybrius and Irene was named Proba. She \ 
married Probus and was mother to a younger Juliana. This younger Juliana married another \ 
Anastasius and was mother of Areobindus, Placidia, and a younger Proba. Another nephew \ 
of Anastasius was Flavius Probus, Roman consul in 502. Caesaria, sister of Anastasius, \ 
married Secundinus. They were parents to Hypatius and Pompeius. Flavius Anastasius \ 
Paulus Probus Moschianus Probus Magnus, Roman Consul in 518 also was a great-nephew of \ 
Anastasius. His daughter Juliana later married Marcellus, a brother of Justin II. The \ 
extensive family may well have included viable candidates for the throne."; 

var textAsWords = text.split(/\s/); 

var myName = "Anastasius"; 

var hits = []; 

for (var i = 0; i < textAsWords.length; i++) { 
    if (myName === textAsWords[i]) { 
     hits.push(textAsWords[i]); 
    } 
} 

if (hits === 0) { 
    console.log("Your name was not found!"); 
} else { 
    console.log(hits); 
} 
0

Это то, что я придумал, оставаясь рядом с оригинальным упражнением.

Это состояло в сравнении каждой буквы в тексте с первым символом имени. При обнаружении этого символа вам нужно было добавить его и любые символов, которые следовало в массив, только останавливаясь, когда количество символов равно количеству букв в имени.

Далее ученику было предложено улучшить код, чтобы он добавил только буквы, соответствующие точному названию. Поскольку первоначальное упражнение не использовало пробелы или искало появление имени в одной полной строке букв, я тоже этого не делал.

/*jshint multistr:true */ 
 
var text = "olleboleYntke Mchael MichaetMichael S1knol E E rin oef goblinMichael kdmS3ksMichael K elkekeerifdlkùYnyslght MichaelSerind"; 
 
myName = "Michael"; 
 
var hits = []; 
 
var getCharName = function(namePos) { 
 
    charName = myName[namePos]; 
 
}; 
 

 
for (i = 0; i <= text.length; i++) { 
 
    namePos = 0; 
 
    getCharName(namePos); 
 
    if (text[i] === charName) { 
 
    var letterMatch = false; 
 
    for (j = 0; j < myName.length; j++) { 
 
     getCharName((namePos + j)); 
 
     if (text[(i + j)] === charName) { 
 
     letterMatch = true; 
 
     } else { 
 
     letterMatch = false; 
 
     } 
 
    } 
 
    if (letterMatch === true) { 
 
     for (j = 0; j < myName.length; j++) { 
 
     hits.push(text[(i + j)]); 
 
     } 
 
    } 
 
    } 
 
} 
 
if (hits === 0) { 
 
    console.log("Your name was not found!"); 
 
} else { 
 
    console.log(hits); 
 
}

0

Я на том же упражнении, и это мой ответ.

Метод сначала находит совпадение с первой буквой myName.Когда мы находим совпадение, мы помещаем на него маркер X и запускаем текст, чтобы увидеть, есть ли полное совпадение. Если есть полное совпадение, мы возвращаемся к маркеру X и помещаем правильную длину текста в выходной массив «hits». Поместив все буквы в массив, мы вернемся к маркеру X, чтобы продолжить остальную часть текста.

Если у нас нет полного соответствия, мы возвращаемся к нашему месту X и продолжаем искать совпадение с первой буквой myName.

var text = "HahahnhahahahnhaHahahahahahahahahahahahaHahahahahahahahahahaHahahahahahnhaHahnhahahahahahahahahaHahaha" 
var myName = "Hahn" 

var hits =[] //the output will be an array 

for(i=0; i<text.length; i++){ 
    var m = 0; 

    if(text[i] === myName[0]){ 
     for (j=0; j<myName.length; j++){ 
      if (text[i+j] !== myName[m]){ 
       break 
      } 
      m++; 
      if (m === myName.length){ 
       for (n=0; n<myName.length; n++){ 
        hits.push(text[i+n]); 
       } 
      } 
     } 
    } 
} 

console.log(hits) 
3

**

for(var i = 0; i < text.length ; i++){ 
    if(text[i] === "Z"){ 
     var getText = text.substring(i, i + myName.length); 
     if(getText === myName) 
     { 
      for(var j = i; j < (myName.length + i); j++){ 
       hits.push(text[j]); 
       } 
      } 
     } 
    } 

**

Сойдет ... легко.

0

Самый короткий путь найти свое имя, чтобы использовать .match пример ниже:

var text = "Hello my name is Zachary Sohovich. I'm a 20 year old dude from 
Southern California and I love to code"; 

var nameCheck = text.match(/zachary/gi) 
console.log(nameCheck) 

Обратите внимание, что ги после вашего имени это говорит консоль, чтобы регистрировать все совпадения независимо от случая использования. Вы также можете использовать .match, чтобы также быть чувствительным к регистру, заменив gi с g.

Смежные вопросы