package Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
public class Stringchar {
public static void main(String[] args) {
int count =0;
String s = "mmamma";
//System.out.println(s.length());
LinkedHashSet<Character> ch = new LinkedHashSet<Character>();
for (int i=0; i<s.length(); i++){
ch.add(s.charAt(i));
}
Iterator<Character> iterator = ch.iterator();
while(iterator.hasNext()){
Character st = (Character) iterator.next();
for (int k=0; k<s.length() ; k++){
if(charAt(k)== st){ // Why this charAt method is not working?
count = count+1;
}
if(count>1) {
System.out.println("Occurance of "+ st + "is" + count);
}
}
}
}
}
我是编码的新手,所以我可能会很愚蠢地问这个问题。我编写了一个代码,试图使用集打印字符串中一个字符的出现次数和相同字符的数量,但是这样做却遇到了一些问题。请求您提供帮助。
答案 0 :(得分:1)
这里:
charAt(k);
与
基本相同this.charAt(k);
换句话说:您正在尝试在此代码所在的类上调用方法。
我认为您打算改做someStringVariable.charAt(k)
! (当然,您的意思是s.charAt()
,但是s
太糟糕了,没有告诉变量名称。变量是您的宠物,给它们起个有意义的名字!)
答案 1 :(得分:0)
方法charAt
不是静态的,如果不知道如何在第xx个字符处查找,则需要将其应用于给定的String
。
str.charAt(index);
此外,print
操作最好在for loop
之后进行,该操作将对出现的事件进行计数,如果没有,您将在每次出现的事件上打印一次
for (int k=0; k<s.length() ; k++){
if(s.charAt(k) == st){
count = count+1;
}
}
if(count>1) {
System.out.println("Occurance of "+ st + "is" + count);
}
答案 2 :(得分:0)
我想您想检查一下字符在您的字符串(String s = "mmamma";
)中出现的频率。
charAt()
方法必须应用于String对象,因此必须从中更改if条件:
if(charAt(k) == st)
对此:
if(s.charAt(k) == st)
答案 3 :(得分:0)
您必须像这样更正代码,
while (iterator.hasNext()) {
int count = 0;
Character st = (Character) iterator.next();
for (int k = 0; k < s.length(); k++) {
if (s.charAt(k) == st) { // Why this charAt method is not working?
count++;
}
}
if (count > 1) {
System.out.println("Occurance of " + st + " is: " + count);
}
}
charAt
方法在String
类中可用,因此您必须在String
引用上调用它。我也对代码做了一些其他改进。在while
循环中声明count变量,该变量不太容易出错。最后请注意,我将if
语句从for
循环中移开了,因为如果将其保留在for
循环中,则会产生一些虚假的中间结果。
答案 4 :(得分:0)
问题是您试图将一个字符放置在一个字符的位置。创建变量st
时,它是一个字符,长度为1;因此,您无法在那里获得charAt(index)
。另外,这种使用LinkedHashSet
的方法将不起作用,因为当您将这些字符添加到LinkedHashSet
时,每个字符添加的次数不会超过一次。相反,您需要一个ArrayList
。
这可能不是最有效的解决方案,但是它将完成您尝试使用HashSet
String s = "mmamma";
List<Character> characterList = new ArrayList<>();
LinkedHashSet<Character> characterLinkedHashSet = new LinkedHashSet<>();
for(char c : s.toCharArray()) {
characterLinkedHashSet.add(c);
characterList.add(c);
}
for (Character character : characterLinkedHashSet) {
int frequency = Collections.frequency(characterList, character);
System.out.println("The frequency of char " + character + " is " + frequency);
}
那么,这将创建您的LinkedHashSet
和ArrayList
。 ArrayList
将所有字符存储在Collection
中,而LinkedHashSet
仅存储每个字符的一个实例。然后,我们可以遍历HashSet
并获得ArrayList