我想计算字符串中的唯一字符
输入:
"aabbccdefgh"
输出:
8
我的代码不起作用并抛出错误:
我的代码:
public class test {
public static void main(String[] args) {
String[] s = {""};
int counter = 0;
int pom = 0;
for(int i = 0; i < s.length; i++){
for(int y = 0; y < 128; y++){
if(s[i].compareTo(args[y])>0){
pom++;
}
}
}
while(pom == 1){
counter++;
}
System.out.println(counter);
}
}
有人能说出我出错的地方吗?
答案 0 :(得分:3)
使用Set
。它将确保唯一性,因此在您添加每个角色后,该组的大小将成为您的答案。
答案 1 :(得分:2)
为什么不使用Set
来计算唯一的令牌数?
String str = "aabbccdefgh";
HashSet<Character> set = new HashSet<Character>();
for (int i=0; i < str.length; i++) {
char c = str.charAt(i);
set.put(c);
}
System.out.println(set.size());
答案 2 :(得分:1)
我认为错误的根本原因是这段代码:
for(int y = 0; y < 128; y++){
if(s[i].compareTo(args[y])>0){
pom++;
}
}
具体来说,循环内args[y]
的比较。上面的代码假定您在调用它时将至少128个参数传递给java程序,即
java test param0 param1 ... param127
而且我很确定你得到ArrayIndexOutOfBoundsException
。
现在您已了解原因,请使用@Kevin's answer来解决您的问题。
答案 3 :(得分:1)
public static void main(String[] args) {
String str = "aabbccdefgh";
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str.substring(0, i).contains(str.charAt(i) + ""))
System.out.println();
else
count++;
}
System.out.println(count);
}
不使用set就试试这个。
答案 4 :(得分:0)
由于任务只计算字符串中出现一次的字符,因此请使用Map<Character, Integer>
计算字符频率。否则逻辑就会在其他答案中显示出来。
答案 5 :(得分:0)
public static void main(String[] args) {
String str = "aabbccdefgh";
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < str.length(); i++) {
Integer count = map.get(str.charAt(i));
if (count == null)
map.put(str.charAt(i), 1);
else
map.put(str.charAt(i), count + 1);
}
int uniqueCount = 0;
for (Integer i : map.values())
if (i == 1)
uniqueCount++;
System.out.println(uniqueCount);
}
这是另一个答案,它将使用Map计算在给定字符串中只出现一次的字符的出现次数。
答案 6 :(得分:0)
如果要计算唯一的字符数,则set不是一个选项,因为set包含重复的字符一次。例如,&#34; galaxy&#34;应该返回4但是使用set,它将返回5,因为&#39; a&#39;也将包括在内
答案 7 :(得分:0)
如果您已经使用Java 8,请使用以下代码:
public static void main(String[] args) {
System.out.println(countDistinctCharacters("aabbccdefgh"));
}
public static long countDistinctCharacters(String letter) {
return letter.chars().distinct().count();
}