私はJava初心者で、特に問題があります。その中のアルファベットの繰り返しを多重化する文字列を考えてみましょう:
String a="AAABBBAACCBBDD"
for
私はこれをとで何度も試しましたcharAt
。期待される出力:
"ABCD"
この操作のための組み込み関数と出力を取得するためのアイデアはありますか?
文字列の文字を繰り返し処理して、一意の文字のセットを構築できます。
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);
私は次のようなことをします
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 result = "";
for(int i = 0; i < a.length(); i++)
if(!result.contains(a[i])) {
result += a[i];
}