使用charAt方法时出现“对于Stringchar类型,未定义方法charAt(int)”的错误

时间:2018-09-10 14:08:53

标签: java string char

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);
                }
            }                           
        }           
    }
}

我是编码的新手,所以我可能会很愚蠢地问这个问题。我编写了一个代码,试图使用集打印字符串中一个字符的出现次数和相同字符的数量,但是这样做却遇到了一些问题。请求您提供帮助。

5 个答案:

答案 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);
}     

那么,这将创建您的LinkedHashSetArrayListArrayList将所有字​​符存储在Collection中,而LinkedHashSet仅存储每个字符的一个实例。然后,我们可以遍历HashSet并获得ArrayList

内的频率