我是一个Java noob,我有特殊的问题。 让我们考虑其中multipe字母的重复在一个字符串:java字符串重复的字母表
String a="AAABBBAACCBBDD"
我与for
和charAt
尝试这种多次。 预期输出:
"ABCD"
是否有此操作的任何想法,让输出任何内建的功能?
我是一个Java noob,我有特殊的问题。 让我们考虑其中multipe字母的重复在一个字符串:java字符串重复的字母表
String a="AAABBBAACCBBDD"
我与for
和charAt
尝试这种多次。 预期输出:
"ABCD"
是否有此操作的任何想法,让输出任何内建的功能?
我会做类似
public static String dedup(String text) {
Set<Character> seen = new LinkedHashSet<Character>();
StringBuilder sb = new StringBuilder();
for (char c : text.toCharArray())
if (seen.add(c))
sb.append(c);
return sb.toString();
}
您可以通过字符串的字符建立了一套独特的字符重复:
String a = "AAABBBAACCBBDD";
Set<Character> charSet = new HashSet<String>();
for (char c : a.toCharArray())
{
charSet.add(c);
}
然后,你可以设定转换到一个列表,并对其进行排序显示/ toString()
用途:
List<Character> uniqueCharList = new ArrayList<Character>(charSet);
Collections.sort(uniqueCharList);
// Convert List<Character> to char[]
// see http://stackoverflow.com/q/6649100/139010 for a more concise library call
char[] uniqueCharArray = new char[uniqueCharList.size()];
for (int i=0; i<uniqueCharArray.length; i++)
{
uniqueCharArray[i] = uniqueCharList.get(i);
}
String result = new String(uniqueCharArray);
我会使用LinkedHashSet来保存顺序;;) –
这并不提供按字典排序。更好的是当你完成所有工作时,使用List,IMO进行排序。 –
它不清楚OP是否需要外观顺序或ASCII顺序。 –
你不需要列表或设置为此。只需字符串来存储一切。我希望这没有错误。
String result = "";
for(int i = 0; i < a.length(); i++)
if(!result.contains(a[i])) {
result += a[i];
}
-1。这将具有可靠的渐近运行时性能。每次调用'String#contains()'是_O(n)_,循环中的字符串连接是_O(n²)_。 –
它理论上有用,但如果字符串非常长,会怎么样?重新考虑你的方法。 – Franklin
什么代码你使用的时间最接近解决方案? – Hbcdev
请发布你到目前为止。我们希望看到您的努力。 –
我不明白这个问题。只是迭代角色并记住目前为止发现的角色......例如通过使用inbult'String b = a.charAt(0)'使用Set – home