我需要计算一个字母在字符串中出现的频率。
为此,我考虑过使用扫描仪对象,将字符串传递给它
Scanner s = new Scanner(String)
,然后使用next()方法通过switch语句分析每个字符。
我已经在这些面板上进行了搜索,并设计了以下内容:-
for (int i = 0; i < outputString.length(); i++) {
Scanner s = new Scanner(outputString);
char letter = s.next().charAt(i);
switch (letter) {
switch code;
}
当我正在分析的字符串包含空格以外的任何内容(-_z1等)时,这似乎起作用,这将导致程序引发String.IndexOutOfBoundException(4)。
还有其他我可以尝试的方法,还是我应该删除单词中的所有空格(即,我正在考虑通过使用for循环创建一个新单词字符串来添加每个字符串的想法。charAt(i)!='') 。
编辑:我忘记了扫描仪在for循环中,我将其取出。其次,不确定它是否会改变很重要,但是我试图计算字符串中每个字母出现的次数,而不仅仅是一种字母。感谢您的评论!
先谢谢了,
凯文
答案 0 :(得分:0)
这是解决另一个问题上提供的此问题的另一种方法。 (尚不能发表评论..因此必须作为答案...) How to count frequency of characters in a string?
答案 1 :(得分:0)
我强烈认为您正在使用该方法使事情复杂化。您只需将String(以及您要搜索的char)传递给一种方法,就像下面的方法一样:
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;
}
我希望这会有所帮助。.编码愉快!
答案 2 :(得分:0)
同时具有:
Scanner s = new Scanner(outputString);
在for
循环中,您将在每次迭代中创建一个新的Scanner
(效率不高,也不想要)。
如果您已经有一个名为String
的{{1}},则可以按照以下方式直接访问其字符/字母:
outputString
答案 3 :(得分:0)
您应该按照上述解决方案来获取字符串中的重复字符。但是,我仅向您提示您为什么会收到例外情况
考虑以下代码:
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);
}
答案 4 :(得分:0)
首先,每次准备下一个字符时,都不要创建Bound
。在new Scanner
之前只做一次。
第二-要逐字符读取扫描仪,您已将for loop
设置为delimeter
。在这种情况下,""
返回下一个字符。
第三-您使用scan.next()
分析字符串,这样就可以了(不是最佳和开销,但可以)。然后,创建一个新的Scanner
符号,并依靠它的数据,而不是goven字符串的长度;请使用Scanner
方法。我的意思是,您只需要添加Scanner.hasNext()
,以确保扫描仪的流中存在更多字符:
hasNext()
P.S。。这是代码示例,您如何使用不同的方式来计算给定字符串中的字符频率。也许您会发现其中之一与您的任务更相关。
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
}
}