2015-02-23 138 views

回答

0
String s = "test1, test2,test1, ...."; 
String parts[] = s.split(","); 

然后所有的令牌是在parts[],你可以通过遍历正好,看看是否有2匹配。使用嵌套for循环。一个在每个运行,另一个提前与那些阵列中

+0

如果输入很大,CPU性能将不会最佳。您可以通过使用哈希表将性能从O(n^2)更改为O(n)。在JS中,你可以用普通的'objects'来实现这一点。 – Ricardo 2015-02-23 23:33:11

+0

其实,@OrangePot,你的代码不是'JavaScript'! – Ricardo 2015-02-23 23:34:42

+0

它不完全O(n^2)导致你只能在数组中看到前方。但是,是的,不是最有效的方式,但是如果输入很小,最简单的方法就是实施。 – OrangePot 2015-02-23 23:39:15

0

我会做类似如下:

(?:^|,)([^,]+)(?=.*,\1(?:,|$)) 

See Regex 101 Demo here.

请注意,我已经采取的自由从逗号分隔的列表中删除空格。它只是让事情变得更简单。

1

如果你不介意解决方案是一个功能,而不是RegEx,这是一个工作正常的代码。

function isSetString(str, separator) { 
    //TODO input validation 
    var arr = str && str.split(separator || ","), 
     l = arr && arr.length, 
     o = {}; 

    for (var i = 0; i < l; i++) { 
     if (o.hasOwnProperty(arr[i])) { 
      return false; 
     } else { 
      o[ arr[i] ] = true; 
     } 
    } 
    return true; 
} 
+0

其工作..谢谢 – 2016-03-29 05:21:39