词频图表问题

时间:2014-08-03 11:59:44

标签: java java.util.scanner

此代码的目标是使用main方法java创建一个程序来分析从用户输入的文本文本。

他们通过将文本输入扫描仪来执行此操作,然后由程序进行分析。分析是产生单词频率,平均长度,并以星号图表的形式打印出结果,单个“*”代表1个单词。

例如“鸟可能飞”会产生这样的结果:

Enter text: 
Birds can maybe fly
Birds can maybe fly
1 letter words: 0
2 letter words: 0
3 letter words: 2
4 letter words: 0
5 letter words: 2
mean lenght: 4.0

1 letter words
2 letter words
3 letter words **
4 letter words
5 letter words **

到目前为止,我已经完成了单词频率和单词mean,但我坚持的部分是创建星号图表。这是一个我从未接触过的领域,我想知道如何去做,我会使用直方图还是只使用我的int然后打印出一个“*”而不是一个数字?我不希望任何人只是给我代码,但是如果有人可以给我一些暗示我应该做什么或只是指出正确的方向或者只是给我一个解释我应该做什么,我将不胜感激

代码:

import java.util.Scanner;

public class Freq
{

    public static void main(String[] args)
    {

        Scanner scan = new Scanner(System.in);

        while (true)
        {

            System.out.println("Enter text: ");

            String s;
            s = scan.nextLine();
            String input = s;
            String strippedInput = input.replaceAll("\\W", " ");

            System.out.println("" + strippedInput);

            String[] strings = strippedInput.split(" ");
            int[] counts = new int[6];
            int total = 0;

            for (String str : strings)
                if (str.length() < counts.length)
                    counts[str.length()] += 1;
            for (String s1 : strings)
                total += s1.length();
            for (int i = 1; i < counts.length; i++)

                System.out.println(i + " letter words: " + counts[i]);
            System.out.println(("mean lenght: ") + ((double) total / strings.length));
        }
    }
}

2 个答案:

答案 0 :(得分:0)

你可以循环counts并为每个单元格打印一些等于存储在其中的数字的星号:

for (int i = 0; i < counts.length; ++i) {
    StringBuilder sb = new StringBuilder(i).append(" letter words ");
    for (int j = 0; j <= counts[i]; ++j) {
        sb.append('*');
    }
    System.out.println(sb);
}

答案 1 :(得分:0)

Commons Lang StringUtils.repeat()

用法:

 String str = "*";
 int n = 2;
 String repeated = StringUtils.repeat(str, n);

重复将是: **