为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

陪伴而非守候 2021-09-12 16:00:43
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);                }            }                                   }               }}我是编码新手,所以问这个问题可能很愚蠢。我已经编写了一个代码,我试图在其中使用集合打印字符串中一个字符的出现次数和相同次数,但是我在这样做时遇到了一些问题。请求你帮忙。
查看完整描述

3 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

这里:

charAt(k);

基本上是一样的

this.charAt(k);

换句话说:您正试图在此代码所在的类上调用一个方法。

我假设你打算这样做someStringVariable.charAt(k)!(当然,你的意思是s.charAt(),但它s是一个可怕的,没有任何意义的变量名称。你的变量是你的宠物,给它们起个有意义的名字!)


查看完整回答
反对 回复 2021-09-12
?
呼唤远方

TA贡献1856条经验 获得超11个赞

你必须像这样更正你的代码,


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循环内声明计数变量,这样不容易出错。最后请注意,我已将if语句从for循环中移开,因为如果将其保留在for循环内,则会产生一些虚假的中间结果。


查看完整回答
反对 回复 2021-09-12
?
当年话下

TA贡献1890条经验 获得超9个赞

问题是你试图在一个字符的位置获取一个字符。创建变量时,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


查看完整回答
反对 回复 2021-09-12
  • 3 回答
  • 0 关注
  • 326 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信