将charAt(x)与String array = letter [y]进行比较

时间:2015-03-16 23:43:50

标签: java arrays

我正在尝试编写一段使用数组生成字母频率的代码。我对如何将字符串中的字母与数组中的字母进行比较感到困惑。我的基本伪代码如下。

import java.util.Scanner;


public class test {
    public static void main (String[]args){

        Scanner sc = new Scanner (System.in);

        System.out.print ("Please enter a sentence: ");
        String str = sc.nextLine();

        String [] let = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
        Float [] freq = new Float [25];



        int x,a = 0,b = 0, strCount = 0;
        String str1;

        str1 = str.replaceAll(" ", "");

        for (x = 0; x < str1.length(); x++)
        {
            strCount++;
        }
        System.out.println("The number of Characters in the string is :" + strCount);
        System.out.println();

现在我坚持如何将str1与let数组进行比较。我尝试了以下但是比较有问题。

    while (b < strCount)
    {
        while (a < let.length)
        {
            if (let[a] == str1.charAt(b))
            {
                freq[a] = freq[a]++ ;
            }
            if(let[a] != str1.charAt(b))
            {
                a = a++;
            }
        }
        b = b++;
    }   

非常感谢任何帮助。

谢谢。

3 个答案:

答案 0 :(得分:0)

好吧,我看到了其他一些问题,但你提出的问题很简单。

if (let[a].charAt(0) == str1.charAt(b)) // <-- one letter
{
    freq[a]++ ;
}
else
{
    a++;
}

此外,strCount = str1.length();不需要循环。

答案 1 :(得分:0)

您可能希望通过替换while循环来消除永久循环的风险     对于 循环。 也,     a = a ++; 是不正确的,而     一个++; 要么     a = a + 1; 是正确的。 解决这两个问题,你就可以解决问题了。

答案 2 :(得分:0)

让我解决一些看似突出的问题。首先,您可能需要放大Float[],因为它的大小 25 并且字母表中有 26 字母,这意味着您需要改为Float[] freq = new Float[26]。此外,您使用str.replaceAll(),但str.replace()就足够了 - 它们都会替换字符串中的所有匹配项。

要计算出现次数,您可能需要使用str.charAt(index)或将其分解为char数组(str.toCharArray()),以将该字符与存储在数组中的值进行比较。由于它们都是单个字符,因此您可能还希望将值存储为基元char而不是String

两个while循环完全没必要,因为可以使用一个for循环完成。另外,使用str.length()而不是创建自己的变量并使用for循环来增加strCount,尤其是当您指定循环str.length()次时...