我正在使用Java开发个人项目,我正在尝试构建非常快速的字符串而不重复。让我举个具体的例子:
String s = null;
for (char c : tableChars) {
s += c;
}
好的,所以我知道我可以检查这个字符是否已经在String中,但我必须在每次插入时查找它。还有另一种方式吗?
答案 0 :(得分:5)
您可以尝试使用Set
String str = "null";
char[] arr=str.toCharArray();
Set<String> set=new LinkedHashSet<>(); // LinkedHashSet keep the order
for(char i:arr){
set.add(String.valueOf(i)); // now you will have unique values
}
现在
System.out.println(set);
Out put:
[n, u, l]
答案 1 :(得分:1)
每当您发现自己在想“我想以非常快的方式检查重复项”时,您应该使用HashSet
或其他Set
实施。
答案 2 :(得分:0)
这样的事情:
Set<Character> charSet = new TreeSet<>();
charSet.add('a');
charSet.add('a');
charSet.add('b');
StringBuilder builder = new StringBuilder();
for (Character c : charSet) {
builder.append(c);
}
System.out.println(builder.toString());
结果是:ab
答案 3 :(得分:0)
您可以先从tableChars中删除重复项:
public static void main(String[] args) {
char[] tableChars = {'G', 'o', 'o', 'd', 'l', 'u', 'c', 'k'};
Set<Character> charSet = new LinkedHashSet<Character>();
for (char c : tableChars){
charSet.add(c);
}
StringBuilder sb = new StringBuilder();
for (Character cr : charSet){
sb.append(cr);
}
System.out.println(sb.toString());
}
结果:
Godluck
答案 4 :(得分:0)
您的要求非常特别,我怀疑已经制作了一个功能来做您想做的事情。看起来在每次插入时寻找角色是唯一的方法,但我可以想到两种方法:
如果你的函数将处理相对较短的字符串,你会在每次插入时查找一个类似的字符,查看你正在构建的字符串。
对于较长的字符串,你可以做的是拥有一个与你的字符集一样大的数组。假设您有50个有效字符,那么数组的大小将为50。
//initialize array to all zeros
for (char c : tableChars)
{
if (array[c] == 0)
{
s += c;
array[c] = 1;
}
}
请注意,数组[c]只是伪代码,您需要调整它以使用ASCII字符作为索引,或者围绕它构建一些自定义逻辑。
答案 5 :(得分:0)
字符数组长度为36个字符+10个数字(0-9)。使用collections.shuffle
足够的排列以满足您的需求我希望。
p.s:其他选项可能是一个长的唯一字符串,并手动只旋转字符。实际上取决于您需要生成多少个字符串。