java编程 字母数和单词数问题

写一个java程序模块。当通过键盘输入一串字符后,报告出每个字母出现过多少次,和有多少个非字母的字符。要求代码写的要尽可能短,不能使用字符串一遍一遍重复的方法。改编和扩展... 写一个java程序模块。当通过键盘输入一串字符后,报告出每个字母出现过多少次,和有多少个非字母的字符。
要求代码写的要尽可能短,不能使用字符串一遍一遍重复的方法。

改编和扩展之前的模块代码。在数出每个字母的数目后,系统需提示用户输入一个单词。然后系统报告出这个单词曾经在之前那串字符中出现过多少次。*单词不是字符的一部分,而是独立的单词,就是一串字母前后都要有空格。
这是最后一道题,截止到明天下午,作业太多,我没有时间弄了,求您帮个忙。
展开
 我来答
方杭尽
2008-05-22 · TA获得超过1万个赞
知道大有可为答主
回答量:1296
采纳率:0%
帮助的人:650万
展开全部
//CountChar.java 你运行看看。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Hashtable;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.border.LineBorder;

public class CountChar extends javax.swing.JPanel implements ActionListener {
private JTextArea input;

private JLabel result;

private JButton ok;

private JTextField findresult;

private JLabel find;

private JTextArea output;

private JScrollPane jScrollPane1;

private JDialog jDialog1;

private JLabel welcome;

private JButton tongji;

private String str;

/**
* Auto-generated main method to display this JPanel inside a new JFrame.
*/
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().add(new CountChar());
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}

public CountChar() {
super();
initGUI();
}

private void initGUI() {
try {
this.setPreferredSize(new java.awt.Dimension(400, 226));
this.setLayout(null);
{
input = new JTextArea();
this.add(input);
input.setBounds(12, 37, 376, 149);
input.setBorder(new LineBorder(new java.awt.Color(0, 0, 0), 1,
false));
}
{
tongji = new JButton();
this.add(tongji);
tongji.setText("统 计");
tongji.setBounds(140, 192, 108, 22);
tongji.addActionListener(this);
}
{
welcome = new JLabel();
this.add(welcome);
welcome.setText("请输入文字:");
welcome.setBounds(12, 12, 121, 14);
}
{
jDialog1 = new JDialog();
// this.add(jDialog1);
jDialog1.setModal(true);
jDialog1.setTitle("结 果:");
jDialog1.setLayout(null);
jDialog1.setBounds(0, 0, 404, 251);
{
jScrollPane1 = new JScrollPane();
jDialog1.getContentPane().add(jScrollPane1);
jScrollPane1.setBounds(30, 12, 338, 120);
{
output = new JTextArea();
jScrollPane1.setViewportView(output);
}
}
{
find = new JLabel();
jDialog1.getContentPane().add(find);
find.setText("请输入你要查的单词:");
find.setBounds(30, 144, 148, 15);
}
{
findresult = new JTextField();
jDialog1.getContentPane().add(findresult);
findresult.setBounds(178, 140, 118, 22);
}
{
ok = new JButton();
jDialog1.getContentPane().add(ok);
ok.setText("\u786e\u5b9a");
ok.setBounds(302, 140, 66, 20);
ok.addActionListener(this);
}
{
result = new JLabel();
jDialog1.getContentPane().add(result);
result.setText("该单词出现");
result.setBounds(30, 184, 136, 15);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

public void actionPerformed(ActionEvent e) {
if (e.getSource() == tongji) {
str=input.getText();
if(str.equals("")){
JOptionPane.showMessageDialog(null,"对不起,你没有输入任何文字。");
return;
}
Hashtable charTJ=new Hashtable();
String info="你输入的文字是:\n"+str;
info+="\n字母统计结果:\n";
char[] c=str.toCharArray();
for(int s=0;s<c.length;s++){
if((c[s]>='a'&&c[s]<='z')|(c[s]>='A'&&c[s]<='Z')){
if(charTJ.get(c[s])!=null){
charTJ.put(c[s],((Integer)charTJ.get(c[s])).intValue()+1);
}else{
charTJ.put(c[s],1);
}
}
}
for(char a='A';a<='Z';a++){
info+=a;
info+="\t";
info+=charTJ.get(a)==null?0:charTJ.get(a);
info+="\n";
}
for(char a='a';a<='z';a++){
info+=a;
info+="\t";
info+=charTJ.get(a)==null?0:charTJ.get(a);
info+="\n";
}
output.setText(info);
jDialog1.setVisible(true);
} else if (e.getSource() == ok) {
String[] strs=str.split(" ");
String findstr=findresult.getText().trim();
if(findstr.equals(""))
{
JOptionPane.showMessageDialog(null,"对不起,你没有输入任何单词。");
return;
}
int count =0;
for(int i=0;i<strs.length;i++){
if(strs[i].equals(findstr)){
count++;
}
}
result.setText("该单词出现"+count+"次");
}
}

}
度安白XG
2008-05-21 · 超过25用户采纳过TA的回答
知道答主
回答量:119
采纳率:0%
帮助的人:72.5万
展开全部
方法可能有点笨,不过效果实现了,希望对你有帮助

import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

public static void main(String[] args) {

/**
* 第一个问题
* 通过键盘输入一串字符后,报告出每个字母出现过多少次,和有多少个非字母的字符
*/

Pattern p = Pattern.compile("[a-zA-Z]"); //设定正则表达式条件,只有符合字母
Matcher m = null;

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
System.out.print("请输入一个字符串:");
String str = null;
int count =0; //非字母出现次数

HashMap map= new HashMap(); //实例化map

try {
str = br.readLine(); //得到键盘输入信息
System.out.println("您输入的字符串是:" + str);

for (int i = 0; i < str.length(); i++) { //循环这个字符串
String key=null;
if(i==(str.length()-1)){ //得到最后一个字符
m = p.matcher(str.substring(i)); //用正则验证字符串
if(m.find()){ //匹配的
key = str.substring(i); //将字母赋值给key以便最后在map中查找相应的出现次数
map.put(str.substring(i),str.split(str.substring(i)).length); //将字母于出现次数存入map
}else{ //不匹配的
count++; //非字母出现次数+1
}

}else{ //得到第一个字符到倒数第二个字符
if(!str.substring(i,i+1).equals(str.substring(str.length()-1))){ //判断是否不等于最后一个字符
m = p.matcher(str.substring(i,i+1)); //用正则验证字符串
if(m.find()){//匹配的
if(map.containsKey(str.substring(i,i+1))){ //如果map中已经存在这个字母不做任何操作

}else{
key = str.substring(i,i+1); //将字母赋值给key以便最后在map中查找相应的出现次数
map.put(str.substring(i,i+1),str.split(str.substring(i,i+1)).length-1); //将字母于出现次数存入map
}
}else{ //不匹配的
count++; //非字母出现次数+1
}
}
}
if(map.containsKey(key)){ //根据key查找map中相应的值
System.out.println("字母"+key+"出现的次数是:"+map.get(key));
}
}
System.out.println("非字母包括空格出现的次数是:"+count);

} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}

/**
* 第二个问题
* 在数出每个字母的数目后,系统需提示用户输入一个单词。
* 然后系统报告出这个单词曾经在之前那串字符中出现过多少次。
*/
System.out.println("");
System.out.println("**********************************");
System.out.println("");
System.out.print("请输入一个单词:");
String str2=null;
try {
str2 = br.readLine().trim();
System.out.println("您输入的单词是:" + str2);
if(str.substring(str.length()-4).equals(str2)){
System.out.println( str2+" 在 "+str+"中出现的次数是:"+(str.split(str2).length));
}else{
System.out.println( str2+" 在 "+str+"中出现的次数是:"+(str.split(str2).length-1));
}

} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
racnow
2008-06-05 · 超过36用户采纳过TA的回答
知道答主
回答量:127
采纳率:0%
帮助的人:0
展开全部
这分我要了,还是我写的最好
package my.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CountTest {

public static void main(String []args)
{
//测试,不和你折腾了,老板看到会骂的,有空可以学学正则表达式,记得给分啊,到目前为止好像没人比我写的好了
String test=" zhe shi yi ge ci shi yong de zi fu chuan,kan kan jie guo. shi";
System.out.println(countWord(test));
System.out.println(countLetter(test));
System.out.println(findWord(test,"shi"));
}
/**
* 检索单词数,所有前后有空格的认定为一个单词
* @param input
* @return
*/
public static int countWord(String input)
{
String regExp="\\s*[,.。]+\\s*|\\s+";
return input.trim().split(regExp).length;
}

public static int countLetter(String input)
{
String regExp="[^a-zA-Z]+";
StringBuffer buffer=new StringBuffer();
for(String temp:input.split(regExp))
{
buffer.append(temp);
}
return buffer.length();
}

/**
* 用于检索word指定的单词在input这个输入串里边的出现次数
* @param input
* @param word
* @return 返回实际出现的次数
*/
public static int findWord(String input,String word)
{
int count=0;
String regExp="\\s*\\b("+word+")\\b";
Pattern pattern=Pattern.compile(regExp);
Matcher matcher=pattern.matcher(input);

while(matcher.find())
{

for(int i=1;i<=matcher.groupCount();i++)
{
System.out.println("出现位置:"+matcher.start(i)+" "+matcher.end(i)+" 实际的单词:"+matcher.group(i));
count++;
}
}
System.out.println("总共出现:"+count+"次"+word);
return count;
}
}

楼上的话可以乱说,X不要乱放,你不是对我给的这个测试字符串说的吧,如果是你请看清楚,为了测试特殊情况,我在开头加了一个空格(我是计算空格在内的,如果你不打算把开头的空格计算在内的话,自己调用trim)。要是有bug你就指出来你的输入串,结果是什么,什么地方不对,如果只是乱放XX的话滚远点,没事的时候把我的代码和你的代码好好比比看看谁的简单谁的合理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
apollo47
2008-05-21 · TA获得超过1451个赞
知道小有建树答主
回答量:810
采纳率:0%
帮助的人:538万
展开全部
String s = "从键盘输入的字符串";
// s = s.toLowerCase(); // 如果不区分字母大小写。
Map map = new HashMap();
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
String key = "非字母";
if((c>=65 && c <= 90) || (c>=97 && c<=122)){
key = String.valueOf(c);
}
Integer num = (Integer)map.get(key);
if(num == null){
num = new Integer(1);
}else{
num = new Integer(num.intValue() + 1);
}
map.put(key, num);
}
// 打印结果出来。
Iterator iter = map.keySet().iterator();
while(iter.hasNext()){
String key = (String)iter.next();
Integer num = (Integer)map.get(key);
System.out.println(key + " 出现次数:" + num);
}

不是很明白你第二个问题的。
但可以用String.index(startIndex, subStr)方法来处理。
参考:http://zhidao.baidu.com/question/52475004.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
laodajiushiniu
2008-05-21 · TA获得超过405个赞
知道小有建树答主
回答量:430
采纳率:0%
帮助的人:325万
展开全部
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) throws IOException {
int zimu = 0;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.print("输入字符串:");
String s = " "+in.readLine()+" "+" ";
for(int i=65;i<=122;i++){
if(i>90 && i<97)continue;
int len=s.split(((char)i)+"").length-1;
System.out.println("字母"+(char)i+"的数量是:"+len);
zimu+=len;
}
System.out.println("字母数:" + zimu);
System.out.println("非字母数:" + (s.trim().length()-zimu));
System.out.print("输入单词:");
String t = " "+(in.readLine().trim())+" ";
System.out.println("单词"+t+"的数量是:"+(s.split(t).length-1));
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(10)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式