编写一个GUI程序,实现单词分析功能。要求:
(1)获取用户指定的英文文本内容(可以从界面上的TextArea获得,也可以让用户从磁盘选择一个文件);
(2)分析该文本,在一个TextArea内输出所有出现过的单词,但不允许重复,每个单词后面要标记出现的次数。
如:输入 I have a Book,you have a book.输出:I(1),have(2),a(2),book(2),you(1)
因考研没时间做,谁能帮个忙 不胜感激!!
网上找了个 帮我改改也行 谢谢!
个文件中(英文加标点),统计每个单词出现的频率,并排序输出.(用JAVA编写).
我编写了个,有3个错误,望高手指教.
代码如下:
import java.awt.*;
import java.io.*;
public class wordexam
{
public swap(int x,int y) //用于整型数据的交换
{ int temp;
temp=x;
x=y;
y=temp;
}
public swap(string x,string y) //用于字符串类型的交换
{ string temp;
temp=x;
x=y;
y=temp;
}
public class word
{ //用于存储单词和它出现的频率
string word;
int cout=0;
}
public static void main()
{
int i,r,s,w,a;
char c;
string ptr=0,str, url,file;
word wor[];
System.out.println("请输入你要打开的文件的路径!\n");
//scanf("%s",&url);//请你直接把路径直接副给URL
System.out.println("请输入你要打开的文件名!\n");
//scanf("%s",&file);//请你直接把文件名直接副给FILE
try{
File file1=new File("url");
FileReader fr=new FileReader(file1);
BufferedReader inFile=new BufferedReader(fr);
if((str=infile.readline())==null) //打开文件
{
System.out.println("你输入的文件无法打开\n");
fr.close();
}
}
catch(IOException e)
{
System.out.println(e);
}
//把文件中的内容存入数组
for(i=0;(c=str[i])!="\0";i++)
if('A'<=c<='z') //判断是否为字母
ptr=strcat(ptr,c); //找出单词
else if(r==1)
{ wor[1].word=ptr;
wor[1].word+=1;
}
else if(1<r)
{ for(g=1;g<=r;g++) //判断单词是否相同
{if(strcmp(wor[g].word,ptr)==0)
{
wor[g].cout+=1;
ptr=0;
}
else
{ wor[r+1].word=ptr; //单词不相同的处理
wor[r+1].cout+=1;
}
}
}
for(s=1;s<=r;s++) //对单词出现的频率进行的排序
for(w=2;w<=r;w++)
do {
swap(wor[s].cout,wor[w].cout);
swap(wor[s].word,wor[w].word);
}
while(wor[s].cout>wor[w].cout);//升序进行排序
for(a=1;a<=r;a++) //结果的输出
{
System.out.println("单词的升序排列为");
System.out.println(wor[a].word);
System.out.println("对应单词出现的频率为");
System.out.println(wor[a].cout);
}
}
}
出现的错误如下:
wordexam.java:5: '{' expected
public class swap(int x,int y) //用于整型数据的交换
^
wordexam.java:11: '{' expected
public class swap(string x,string y) //用于字符串类型的交换
^
wordexam.java:84: '}' expected
^
3 errors
[CODE]/*
* Test.java
*
* Created on 2006年12月29日, 下午11:32
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package testWords;
/**
*
* @author lbf
*/
import java.util.regex.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
public class Test extends JFrame implements ActionListener{
private Map<String,Integer> map;
private JMenuItem open,save,exit,about,count;
private JTextArea content;
private String result;
/** Creates a new instance of Test */
public Test() {
super("统计单词数");
initWindow();
map=new TreeMap<String,Integer>();
}
private void initWindow(){
JMenu file=new JMenu("文件(F)");
file.setMnemonic('F');
file.add(open=new JMenuItem("打开"));
file.add(save=new JMenuItem("保存"));
file.add(about=new JMenuItem("关于"));
file.add(exit=new JMenuItem("退出"));
open.setAccelerator(KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK));
save.setAccelerator(KeyStroke.getKeyStroke('S',InputEvent.CTRL_DOWN_MASK));
exit.setAccelerator(KeyStroke.getKeyStroke('X',InputEvent.ALT_DOWN_MASK));
open.addActionListener(this);
save.addActionListener(this);
about.addActionListener(this);
exit.addActionListener(this);
JMenu edit=new JMenu("操作(M)");
edit.setMnemonic('M');
edit.add(count=new JMenuItem("统计"));
count.addActionListener(this);
count.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.SHIFT_DOWN_MASK));
JMenuBar jmb=new JMenuBar();
jmb.add(file);
jmb.add(edit);
this.setJMenuBar(jmb);
content=new JTextArea();
content.setLineWrap(true);
this.getContentPane().add(new JScrollPane(content),BorderLayout.CENTER);
this.setSize(500,500);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent ae){
Object obj=ae.getSource();
if(obj==count){
doCount();
}else if(obj==open){
doOpen();
}else if(obj==save){
doSave();
}else if(obj==exit){
System.exit(0);
}else if(obj==about){
JOptionPane.showMessageDialog(this,"这是一款简单的统计英文单词次数的程序!!","关" +
"于",JOptionPane.INFORMATION_MESSAGE);
}
}
private void doCount(){
Pattern p=Pattern.compile("\\b\\w+\\b");
Matcher m=p.matcher(content.getText());
map.clear();
while(m.find()){
String temp=m.group().toLowerCase();
Integer sum=map.get(temp);
if(sum==null){
map.put(temp,1);
}else{
map.put(temp,sum+1);
}
}
JPanel jp=new JPanel(new BorderLayout());
JTextArea jta=new JTextArea();
jta.setLineWrap(true);
result=map.toString();
jta.setText(result);
jp.setPreferredSize(new Dimension(300,300));
jp.add(new JScrollPane(jta),BorderLayout.CENTER);
JOptionPane.showMessageDialog(this,jp,"统计结果",JOptionPane.INFORMATION_MESSAGE);
}
private void doOpen(){
try{
JFileChooser jf=new JFileChooser(".");
int i=jf.showDialog(this,"请打开文本文件");
if(i==JFileChooser.APPROVE_OPTION){
StringBuffer sb=new StringBuffer();
File f=jf.getSelectedFile();
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f)));
String temp="";
while((temp=br.readLine())!=null){
sb.append(temp+"\n");
}
content.setText(sb.toString());
}
} catch(Exception exe){
exe.printStackTrace();
JOptionPane.showMessageDialog(this,"打开文件失败!!");
}
}
private void doSave(){
if(result==null){
JOptionPane.showMessageDialog(this,"还没有结果可以保存!!","错误",JOptionPane.ERROR_MESSAGE);
}else{
try{
JFileChooser jf=new JFileChooser(".");
int i=jf.showSaveDialog(this);
if(i==JFileChooser.APPROVE_OPTION){
File f=jf.getSelectedFile();
BufferedWriter bw=new BufferedWriter(new FileWriter(f));
bw.write(result);
bw.close();
JOptionPane.showMessageDialog(this,"保存成功!!\n保存在:"+f);
}
}
catch(Exception exe){
exe.printStackTrace();
}
}
}
public static void main(String[] args)throws Exception {
new Test();
}
}[/CODE]
我刚刚帮你写了一个有界面的
你自己慢慢改进吧,利用正则表达式统计当前文档里面英文单词出现的次数,标点不算
统计结果我是直接以Map的toString方式来取的,你可以自己统计,并按出现的次数排列,这不用我来写吧,你应该会吧
还是那句话,学程序要一步一步来,不能浮躁
[此贴子已经被作者于2006-12-30 13:50:25编辑过]