3 回答

TA贡献1827条经验 获得超9个赞
我强烈认为您使用这种方法会使事情复杂化。您可以简单地将字符串(以及您正在搜索的字符)传递给一个方法,如下所示:
public int checkFreq(char letter, String word){
int freq = 0;
for(int i = 0; i < word.length(); i++){
if((word.charAt(i)) == letter){
freq++;
}
}
return freq;
}
我希望这会有所帮助.. 编码愉快!

TA贡献1982条经验 获得超2个赞
首先,new Scanner当你准备好下一个角色时,你不应该每次都创建。只做一次,之前for loop。
第二- 要逐个字符读取扫描仪,您已设置delimeter为"". 在这种情况下,scan.next()返回下一个字符。
第三- 你Scanner用来分析字符串,没关系(不是最佳和开销,但没关系)。然后创建新的Scanner实例并依赖它的数据,但不依赖于被治理字符串的长度;使用Scanner.hasNext()方法。我的意思是,您所需要的只是添加hasNext()以确保扫描仪的流中存在更多字符:
try (Scanner scan = new Scanner(outputString)) {
scan.useDelimiter(""); // to make scan.next() return one single character
while (scan.hasNext()) {
char ch = scan.next().charAt(0); // next() returns String with one character
// do your work
}
}
PS这是代码示例,如何用不同的方式计算给定字符串中的字符频率。您可能会发现其中之一与您的任务更相关。
// this is your approach
public static int characterFrequency(String str, char ch) {
try (Scanner scan = new Scanner(str)) {
scan.useDelimiter("");
int count = 0;
while (scan.hasNext())
count += scan.next().charAt(0) == ch ? 1 : 0;
return count;
}
}
// this one is the most efficient
public static int characterFrequency(String str, char ch) {
int count = 0;
for (int i = 0; i < str.length(); i++)
count += str.charAt(i) == ch ? 1 : 0;
return count;
}
// this one is the smallest of code
public static int characterFrequency(String str, char ch) {
return (int)str.chars().filter(e -> e == ch).count();
}

TA贡献1796条经验 获得超4个赞
您应该按照上述解决方案获取字符串中的重复字符。但是,我只会提示您为什么会遇到异常
考虑以下代码:
String outputString = "Pre ";
for (int i = 0; i < outputString.length(); i++) {
Scanner s = new Scanner(outputString);
System.out.println(outputString.length()); // output is 4
System.out.println(s.next().length()); //output is 3, not considering the space
//char letter = s.next().charAt(i);
//System.out.println(letter);
}
添加回答
举报