文本单词统计程序设计:对任意长文本文件,分类统计其中出现的英文单词、阿拉伯数值、中文单词出现次数。

文本单词统计程序设计:对任意长文本文件,分类统计其中出现的英文单词、阿拉伯数值、中文单词出现次数。,第1张

你的代码逻辑有点乱,我初步看了,至少册裂雹在第37-39行是有问题的,这3行的意思是:如果读取的字符不是字母就继续读,可是如果到了文件末尾,你的代码也不会停下来,因为你没有调用feof(in)测试是否到达了源隐文件末尾。这种文本统计的问题,用C做实在费事。我用C++做过,也很费事。后来用Perl做过,只需要一行代码就够了。perl -E "for(){$n{$_}++ for /(\w+)/g} say $n{$_}, ' ',$_ for sort keys %n" file.txt你可以安装perl后州帆,试试。有C的基础,建议你学学Perl或其他动态语言,对日常工作帮助会很大。祝你成功!

'你这个需求很有意思啊,编写难度不是很大,但要考虑全面。

'运行效果如上图,代码如下所示:

'判断中我将大小写字母均按规则进行了转换。

'原创,亲测可用,转发请说明出处。

Private Sub Command1_Click()

Dim a, b As String

a = Text1.Text

Dim i As Integer

i = Len(a)

Dim arr() As String

ReDim arr(1 To i)

Dim j As Integer

For j = 1 拆凳To i

 b = Mid(a, j, 1)

 If Asc(b) >= 97 And Asc(b) <= 118 Then

 arr(j) = Chr(Asc(b) + 4)

 End If

 If Asc(b) = 119 Then

   arr(j) = "a"

 End If

 If Asc(b) = 120 Then

   arr(j) = "b"

 End If

 If Asc(b) = 121 Then

   arr(j) = "c"

  End If

 If Asc(b) = 122 Then

   arr(j) = "d"

 End If

 If Asc(b) >= 65 And Asc(b) <= 86 Then

 arr(j) = Chr(Asc(b) + 4)

 End If

 If Asc(b) = 87 Then

   arr(j) = "A"

 End If

 If Asc(b) = 88 Then

   arr(j) = "B"

 End If

 If Asc(b) = 旅森旅89 Then

   arr(j) = "C"

  End If

 If Asc(b) = 春模90 Then

   arr(j) = "D"

 End If

 If Asc(b) < 65 Or Asc(b) > 122 Or (Asc(b) > 90 And Asc(b) < 97) Then

  arr(j) = b

 End If

Next j

Text2.Text = Join(arr, "")

End Sub

java编写显示文本的应用程序, 需要用到图形界面GUI编程技术.

步骤一: 需要搭建一个整体的外观,  调整布局和组件的位置.

主要需要使用的组件

JTextField 文本框组件: 用于当做地址栏, 填写文件的路径

JButton 按钮, 用于响应点击事件,根据地址栏的地址读取文件, 并且显示到文本域里

JTextArea 文本域, 用于显示文件里的字符串信搭胡息

JLabel  标签, 用于显示行数信息

布局: 使用边界布局BorderLayout,可以快速按照上下左右中伍枝册的位置快速布局.

步骤二: IO流,读取文本文件信息,并统计行数.

由于要按行读取,方便计算文件的行数, 所以使用Buffered 可以事半功倍.

核心代码如下

StringBuffer txtbuf=new StringBuffer()//用于保存文本信息

int lines=0//用于计算行数

try {

BufferedReader br = new BufferedReader(new FileReader(fp))

String hasRead=null

while((hasRead=br.readLine())!=null){

txtbuf.append(hasRead+"\n")

lines++

}

br.close()//IO流用完记得关闭

} catch (Exception e) {

//当IO出现异常时,要进行提示

JOptionPane.showMessageDialog(this, "文件读取错误,确认文件存在,\n或者没有被其他文件打开.","IO错误",JOptionPane.ERROR_MESSAGE)

}

步骤三:整合代码

import java.awt.*

import java.awt.event.*

import java.io.*

import javax.swing.*

public class ShowTextFrame extends JFrame implements 腔宏ActionListener{

JTextArea jta//该文本域用于显示文本信息

JTextField jtf//该文本框,用于填写文件路径

JLabel jl//该标签用于保存读取到的行数

JButton jbt//按钮

public ShowTextFrame() {

jtf = new JTextField(18)

jbt = new JButton("读取并显示")

jbt.addActionListener(this)

JPanel  jp1 = new JPanel()

jp1.add(jtf)

jp1.add(jbt)

add(jp1,BorderLayout.NORTH)

jta = new JTextArea()

JScrollPane jsp = new JScrollPane(jta)//文本域添加到滚动面板

jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS)//垂直滚动条一直显示

add(jsp)

jl = new JLabel("文件共有0行")

JPanel jp2 = new JPanel()

jp2.add(jl)

add(jp2,BorderLayout.SOUTH)

setTitle("显示文本")//窗口标题

setSize(380, 320)

setLocationRelativeTo(null)//窗口居中

setDefaultCloseOperation(EXIT_ON_CLOSE)

setVisible(true)

}

public void actionPerformed(ActionEvent e) {

if(jbt==e.getSource()){

String fp = jtf.getText().trim()

Info info = getInfo(fp)

jta.setText(info.txt)//把文本信息显示到文本域

jl.setText("文件共有"+info.lines+"行")//把行数显示显示到JLabel

}

}

public Info getInfo(String fp){//通过文件路径,获取文件信息(字符串信息和行数信息)

StringBuffer txtbuf=new StringBuffer()

int lines=0

try {

BufferedReader br = new BufferedReader(new FileReader(fp))

String hasRead=null

while((hasRead=br.readLine())!=null){

txtbuf.append(hasRead+"\n")

lines++

}

br.close()//IO流用完记得关闭

} catch (Exception e) {

//当IO出现异常时,要进行提示

JOptionPane.showMessageDialog(this, "文件读取错误,确认文件存在,\n或者没有被其他文件打开.","IO错误",JOptionPane.ERROR_MESSAGE)

}

return new Info(txtbuf.toString(), lines)

}

public static void main(String[] args) {

new ShowTextFrame()//创建窗口实例

}

}

class Info{//辅助类, 用于传递信息

String txt//文字信息

int lines// 行数信息

public Info(String txt, int lines) {

this.txt = txt

this.lines = lines

}

}

运行效果图


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12418633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存