Манипулирование строкой, замена "" на (пробел) - PullRequest
0 голосов
/ 13 сентября 2011

Я работал над функцией, которая изменяет пробелы между словами в строку " " (пробел).

Например, "Hello World. Hi there." станет "Hello(space)world.(space)Hi(space)there."

РЕДАКТИРОВАТЬ: я пытаюсь построить это для определенного набора структурированного английского языка, который выглядит следующим образом:

  • установить начальное значение результата в пустую строку
  • для каждого индекса в строке аргумента
  • если символ в этом индексе является пробелом, то
  • добавить '(пробел)' к результату
  • иначе
  • добавить символ с указанным индексом к результату
  • конец, если
  • конец для
  • возвращаемый результат

Вот то, что я смог придумать до сих пор.:

function showSpaces(aString)
{
var word, letter;

word = aString
for var (count = 0; count < word.length; count = count + 1)

{
    letter = word.charAt(count);
    if (letter == " ")
    {
        return("(space)");
    }
    else
    {
        return(letter);
    }
}
}

Всякий раз, когда я проверяю этот вызов функции, ничего не происходит:

<INPUT TYPE = "button" NAME = "showSpacesButton"  VALUE ="Show spaces in a string as (space)"
        ONCLICK = "window.alert(showSpaces('Space: the final frontier'));">

Сейчас я только начинаю с JavaScript. Любая помощь будет оценена.

-Ross.

Ответы [ 2 ]

3 голосов
/ 13 сентября 2011

Используйте String.replace

function showSpaces(aString)
{
    return aString.replace(/ /g,'(space)');
}

РЕДАКТИРОВАТЬ: чтобы ваш код работал:

function showSpaces (aString)
{

    var word, letter,
        output = ""; // Add an output string

    word = aString;
    for (var count = 0; count < word.length; count = count + 1) // removed var after for

    {
        letter = word.charAt(count);
        if (letter == " ")
        {
            output += ("(space)"); // don't return, but build the string
        }
        else
        {
            output += (letter); // don't return, but build the string
        }
    }
    return output; // once the string has been build, return it

}
1 голос
/ 13 сентября 2011

Нет, "ничего" не происходит. Это очень редко. Происходит то, что вы получаете синтаксическую ошибку в коде, потому что вы использовали for var ( вместо for (var.

Если вы исправите это, вы заметите, что вы получаете только первый символ в строке, так как вы используете return внутри цикла вместо того, чтобы собирать строку и возвращать ее после цикла.

Вы можете сделать так:

function showSpaces(word) {
  var letter, result = "";
  for (var count = 0; count < word.length; count++) {
    letter = word.charAt(count);
    if (letter == " ") {
      result += "(space)";
    } else {
      result += letter;
    }
  }
  return result;
}

Демо: http://jsfiddle.net/Guffa/pFkhs/

(Примечание. Использование += для объединения строк плохо работает для длинных строк.)

Вы также можете использовать регулярное выражение для замены строки:

function showSpaces(word) {
  return word.replace(/ /g, "(space)");
}
...