计算字符串中的字符出现次数(频率) - java

我有这个GUI,可以计算字符串中第一个字母的出现次数。我希望它以列格式计算所有字母,例如:

这是我到目前为止的内容:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import javax.swing.JButton;  
import javax.swing.JFrame;  
import javax.swing.JLabel;  
import javax.swing.JPanel;  
import javax.swing.JTabbedPane;  
import javax.swing.JTextField;  
public class Index2 extends JFrame implements ActionListener  
{  
    private JTabbedPane jtabbedPane;  
    private JPanel characterFinder;  
    JTextField enterText, countText;  

    public Index2()  
    {  
        setSize(400, 250);  
        setVisible(true);  
        setSize(400, 250);  
        setVisible(true);  
        setTitle("Total Characters");  
        setSize(300, 200);  
        JPanel topPanel = new JPanel();  
        topPanel.setLayout(new BorderLayout());  
        getContentPane().add(topPanel);  
        createCharacterFinder();  
        jtabbedPane = new JTabbedPane();  
        jtabbedPane.addTab("Count Characters", characterFinder); 
        topPanel.add(jtabbedPane, BorderLayout.CENTER);  
    }
    public void createCharacterFinder()  
    {  
        characterFinder = new JPanel();  
        characterFinder.setLayout(null); 
        JLabel enterLabel = new JLabel(  
                "Enter Some Text");  
        enterLabel.setBounds(90, 5, 260, 20);  
        characterFinder.add(enterLabel); 
        enterText = new JTextField();  
        enterText.setBounds(10, 30, 270, 70);  
        characterFinder.add(enterText);  

        JButton search = new JButton("Count Occurences of Each Letter");  
        search.setBounds(15, 100, 260, 20);  
        search.addActionListener(this);  
        characterFinder.add(search);

        countText = new JTextField();  
        countText.setBounds(80, 130, 120, 500);  
        characterFinder.add(countText);
    }
        public void actionPerformed(ActionEvent e){
            String st=enterText.getText();
            char searchedChar=enterText.getText().charAt(0);
            count(searchedChar,st);
    }
    public int count(char c, String str) {
        if (str == null) return 0;
        int cnt = 0;
        for (int i = 0;; cnt++) {
        if ((i = str.indexOf(c,i)+1) == 0) break;
        }
        countText.setText("Character "+c+" occurs "+cnt+" times");
        return cnt;
        }

    public static void main(String[] args)  
    {  
        JFrame frame = new Index2();  
        frame.setSize(300, 700);  
        frame.setVisible(true);  
    }  
}

参考方案

计算字符(假设ASCII字符)的一种好方法是利用'a'可以直接映射到数字这一事实。

int[] charCounts(String s) {
  int[] counts = new int[256]; // maximum value of an ASCII character
  char[] c = s.toCharArray();
  for (int i=0;i<c.length;++i) {
      counts[c[i]]++;
  }
  return counts;
}

现在要找到任何特定元素的计数,您可以执行counts['a']

这可能会使代码更加整洁,只是使用上述方法预先进行计数,然后仅使用大致类似的方式显示计数:

int[] counts = charCounts("my string");
StringBuilder sb = new StringBuilder();
for (char a = 'a'; a <= 'z'; a++) {
    sb.append(a).append(" occurred ").append(counts[a]).append(" times\n");
}

Java Swing SearchBox模型 - java

我需要使用Java Swing的搜索框,如果单击任何建议,当输入字母时它将显示来自数据库的建议,它将执行一些操作。如果有可能在Java swing中,请提供源代码提前致谢 java大神给出的解决方案 您可以使用DefaultComboBoxModel,输出将是这样。Try this在此代码中,您将找到countries数组,因此您需要从数据库中获取此数组。

Swing-典型桌面应用程序中的并发 - java

这可能是一个广泛的问题,但我想知道单用户桌面应用程序通常在何处使用并发。您如何发现理想情况下(在设计阶段)并发问题?附注:从操作系统理论上来说,并发问题通常发生在无法共享资源(例如打印机)的情况下。不过,我仍然对在编程级别上可能发生的情况感到迷惑。 java大神给出的解决方案 Event Dispatch thread与其他逻辑之间的Swing中可能存在线程…

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

Java-如何使Jtextfield充满整个框架 - java

我正在尝试使JTextArea填充整个框架,因此它看起来有点像记事本或textedit。也可以有一个滚动窗格。提前致谢!编辑:JTextArea 参考方案 试试这个 - -import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JTextField; public…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …