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

使用 Scanner 在 for 循环中逐字母分析字符串

使用 Scanner 在 for 循环中逐字母分析字符串

白衣非少年 2022-01-12 16:09:16
我需要计算一个字母在字符串中出现的频率。为此,我考虑使用扫描仪对象,将字符串传递给它扫描仪 s = 新的扫描仪(字符串)并使用 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循环创建一个新单词字符串来添加每个string.charAt(i)!='')。编辑:我忘记了扫描仪在 for 循环中,我将其取出。其次,不确定它是否会发生变化,但我正在尝试计算字符串中字母表中每个字母出现的次数,而不仅仅是一种类型的字母。感谢您的意见!提前致谢,
查看完整描述

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;

}

我希望这会有所帮助.. 编码愉快!


查看完整回答
反对 回复 2022-01-12
?
临摹微笑

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

}


查看完整回答
反对 回复 2022-01-12
?
慕的地8271018

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

  }


查看完整回答
反对 回复 2022-01-12
  • 3 回答
  • 0 关注
  • 213 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号