如何检查两个字符串是否包含特殊字符相同的字符

时间:2016-05-05 11:21:12

标签: javascript jquery

我有两个问题

1)我怎样才能检查两个shuffle字符串是否有相同的字符  像我一样

var str1 = "ansar@#//1";
var str2 = "@#//sanra1";

应该返回true

2)如果没有相同的字符,那么第二次刺痛中不存在的字符

var str1 = "ansar@#//123";
var str2 = "@#//sanra";

应返回123

我知道我可以通过

获得第一个问题的答案
str1.length===str2.length && str1.split("").sort().join() == str2.split("").sort().join(); 

但不确定如何让字符与第二个字符串

不匹配

6 个答案:

答案 0 :(得分:2)

考虑以下实施:

1)

var str1 = "ansar@#//1";
var str2 = "@#//sanra1";

function first(str1, str2) {
    return Array.prototype.every.call(str1, function(c) {
        return str2.indexOf(c) > -1;
    }, this);
}

console.log(first(str1, str2));

2)

var str1 = "ansar@#//123";
var str2 = "@#//sanra";

function second() {
    return Array.prototype.filter.call(str1, function(c) {
        return str2.indexOf(c) === -1;
    }, this).join('');
}

console.log(second(str1, str2));

答案 1 :(得分:2)

使用while循环似乎是一个合理的解决方案:

var str1 = "ansar@#//1";
var str2 = "@#//sanra12";

s1 = str1.split('');

s2 = str2.split('');


var i = s1.length + 1;
while (i--) {
  if (s2.indexOf(s1[i]) >= 0)
    s2.splice(s2.indexOf(s1[i]), 1);
}

console.log(s2)

结果数组表示str2

中未匹配的str1字母

答案 2 :(得分:1)

如果两个字符串中的字符集相同,则返回空字符串。

function findDiff (str1, str2)
{
    var diff = '';

    if (str1.length > str2.length)
    {
        var search = str1;
        var compare = str2;
    }
    else
    {
        var search = str2;
        var compare = str1;
    }

    for (var i = 0; i < search.length; i++)
    {
        var symbol = search[i];

        if (compare.indexOf(symbol) === -1)
        {
            diff += symbol;
        }
    }
    return(diff);
}

findDiff("ansar@#//123", "@#//sanra");

https://jsfiddle.net/tadaspaplauskas/pn7jnj8e/

答案 3 :(得分:0)

此代码可以帮助您根据自己的意愿获得输出。

var str1 = "ansar@#//g123";
var str2 = "@#//sanraD";

function strDiff(s1, s2){
  var t,inter,a1,a2;
  a1 = s1.split('');
  a2 = s2.split('');
  t = a2, a2 = a1, a1 = t;

  inter = a1.filter(function (e) {
      if (a2.indexOf(e) !== -1) return true;
  });

  for (i=0, len=inter.length; i<len; i++) {
    
    for(var j = a1.length-1; j>=0;j--)
      if (a1[j] === inter[i]) a1.splice(j, 1);

    for(var k = a2.length-1; k>=0; k--)
      if (a2[k] === inter[i]) a2.splice(k, 1);    
  }

  if((a1.join('')+a2.join('')).length > 0)
    return(a1.join('')+a2.join(''));
  else
    return "True";   
}

var result = strDiff(str2,str1);
alert(result);

答案 4 :(得分:0)

如果两个字符串中的字符具有相同字符,则将返回 true false ,我认为这是最有效的方法。

a)

function hasSameCharacter(str1, str2) {
    let a = Array.prototype.every.call(str1, (char) => str2.indexOf(char) > -1, this);
    if (a) return Array.prototype.every.call(str2, (char2) => str1.indexOf(char2) > -1, this);
    else return false;
}

console.log(hasSameCharacter(str1, str2));

b)

function hasSameCharacter(str1, str2) {
    for (let i = 0; i < str1.length; i++) {
        if (str2.indexOf(str1[i]) <= -1) return false;
    }
    for (let i = 0; i < str2.length; i++) {
        if (str1.indexOf(str2[i]) <= -1) return false;
    }
    return true;
}

console.log(hasSameCharacter(str1, str2));

希望这会有所帮助,祝您编程愉快:)

答案 5 :(得分:0)

所以我无法发表评论,因为我没有评级,但是我尝试了Yuriy Yakym的解决方案(第二种,非常感谢Yuriy,因为一开始我就一直在为此而苦苦挣扎),虽然在本示例中适用,但如果您在str1上添加另一个'a'字样,则不会向您显示str2实际上没有3个'a',因为它总是引用该字符的首次出现。本质上,您需要删除找到的字符,以确保您考虑到重复项,或者看起来如此。

我通过Yuriy的代码开发了以下内容,以使其对我有用。请自己测试。很高兴被不同意,但是似乎它将注销出现在str1中但没有出现在str2中的所有内容(包括重复项):

const sorter = (str1, str2) => {
   const arr = str1.split(""); 
   const newArray = arr.filter((c) => {
      if (str2.indexOf(c) === -1) {
         return str2.indexOf(c) === -1 
      } else {
         str2 = str2.replace(c, '');
      }   
   })
   return newArray.join("");
};

console.log(sorter(str1, str2));