我正在实现一个代码,用于计算String中所有字符的出现次数。我使用indexOf()方法来检查事件。但它并不适用于第一个角色。 以下代码适用于除第一个字符以外的所有字符。
public static void main(String[] args) {
String str = "simultaneously";
int[] count = new int[str.length()]; //counter array
for (int i = 0; i < count.length; i++) { //initializing counters
count[i] = 0;
}
for (int i = 0; i < str.length(); i++) {
int index = -1;
char c = str.charAt(i);
while (1 > 0) {
if (str.indexOf(c,index) > 0) { //This is not working for
//the first characters
index = str.indexOf(c, index) + 1;
count[i]++;
} else {
break;
}
}
}
for (int i = 0; i < count.length; i++) {
System.out.println(str.charAt(i) + " occurs " + count[i] + " times");
}
}
答案 0 :(得分:7)
java中的数组索引从0开始。 从
更改条件if (str.indexOf(c,index) > 0) {
到
if (str.indexOf(c,index) >= 0) {
而且,初始化计数器的for循环是多余的,默认情况下,int数组中的所有值都初始化为0.
答案 1 :(得分:6)
str.indexOf(c,index)
会为第一个字符返回0
,但您的条件会检查str.indexOf(c,index) > 0
是否为str.indexOf(c,index) >= 0
。将其更改为{{1}}。
答案 2 :(得分:2)
还有一些你需要知道的事情
str.indexOf(c,index)
将从索引&#39;索引&#39;中搜索字符c在你的情况下,对于第一个字符,它是-1,它永远不会找到它,因为字符串的起点是0 也改变你的状况如下
str.indexOf(c,index) >= 0
答案 3 :(得分:2)
数组索引和字符串(字符数组)总是从Java开始为0.
您还想检查位置0,因此请包含&gt; =。
if (str.indexOf(c,index) >= 0) {
此外,使用休息时间有时会令人困惑。 在你的代码中,你的while循环是一个无限的True,然后你必要时就会突破它。
请看下面的代码。它与您想要完成的目的相同。 它更清晰,更清晰,因为它从while循环中删除了中断,你只需检查在while循环开始时语句是否为True而不是在其中。
for (int i = 0; i < str.length(); i++) {
int index = 0;
char c = str.charAt(i);
while (str.indexOf(c,index) >= 0) {
index = str.indexOf(c, index) + 1;
count[i]++;
}
}