从String中删除标点符号和空格

时间:2017-05-23 00:14:19

标签: javascript

函数compress()将接受一个句子并返回一个字符串,其中删除了所有空格和标点符号。
此功能必须拨打isWhiteSpace()isPunct()

我已经完成了调用的功能,但我不知道我的js代码中缺少什么来让它调用函数。

function compress(sent) {
    var punc = "; : . , ? ! - '' "" () {}";
    var space = " ";
    if (punc.test(param)) {
        return true
    } else {
        return false
    }
    if (space.test(param)) {
        return true
    } else {
        return false
    }
    isWhiteSpace(x);
    isPunct(x);
}

3 个答案:

答案 0 :(得分:4)

  

此函数必须调用isWhiteSpace()和isPunct()。

所以你已经有两个函数,当传递的字符是空格或标点符号时,我假设它返回true。然后,您不需要也不应该通过在代码中为空格和标点符号实现重复的基于正则表达式的文本来复制此功能。保持干燥 - 不要重复自己。

基于这两个函数的compress函数如下所示:



function isWhiteSpace(char) {
  return " \t\n".includes(char);
}

function isPunct(char) {
  return ";:.,?!-'\"(){}".includes(char);
}

function compress(string) {
    return string
      .split("")
      .filter(char => !isWhiteSpace(char) && !isPunct(char))
      .join("");
}

console.log(compress("Hi! How are you?"));




我同意正则表达式测试可能是现实世界中的正常选择:

function compress(string) {
  return string.match(/\w/g).join("");
}

但是,您明确要求提供一个调用isWhiteSpaceisPunct

的解决方案

答案 1 :(得分:1)

您可以利用String.indexOf设计isPunct功能。

function isPunct(x) {
    // list of punctuation from the original question above
    var punc = ";:.,?!-'\"(){}";

    // if `x` is not found in `punc` this `x` is not punctuation
    if(punc.indexOf(x) === -1) {
        return false;
    } else {
        return true;
    }
}

解决isWhiteSpace更容易。

function isWhiteSpace(x) {
    if(x === ' ') {
        return true;
    } else {
        return false;
    }
}

您可以将所有内容与一个使用String.charAt检查字符串中每个字符的循环放在一起:

function compress(sent) {

    // a temp string
    var compressed = '';

    // check every character in the `sent` string
    for(var i = 0; i < sent.length; i++) {
        var letter = sent.charAt(i);

        // add non punctuation and whitespace characters to `compressed` string
        if(isPunct(letter) === false && isWhiteSpace(letter) === false) {
            compressed += letter;
        }
    }

    // return the temp string which has no punctuation or whitespace
    return compressed;
}

答案 2 :(得分:0)

如果在函数中返回某些内容,执行将停止。

从我所看到的,你的功能不需要返回任何东西......所以你应该这样做

function compress(sent) { 
    var punc = ";:.,?!-'\"(){} ";
    var array = punc.split("");
    for (x = 0; x < array.length; x++) {
        sent = sent.replace(array[x], "");
    }
    isWhiteSpace(x); 
    isPunct(x);
    return sent;
}