/****************************************
*程序文件名称:TextFindReplace.java
*功能:字符串的查找与替换
*****************************************/
import java.awt.*;
import java.awt.event.*;
public class TextFindReplace implements MouseListener,WindowListener{
private Frame frObj;
private TextArea taObj;
private TextField tfObj1,tfObj2;
private Button buttonObj1;
private Button buttonObj2;
private Button buttonObj3;
private Panel pObj1,pObj2,pObj3,pObj4,pObj5;
private Label labObj1,labObj2,labObj3;
boolean boolObj=false;
Dialog diaObj;
Label textLab;
Button butObj2=new Button("OK");
public static void main(String[] args){
TextFindReplace examObj=new TextFindReplace();
examObj.create();//通过使用成员方法进行实例化各对象等操作.
}
public void create(){
frObj=new Frame("文本的查找与替换");
taObj=new TextArea();
tfObj1=new TextField();
tfObj2=new TextField();
buttonObj1=new Button("Find");
buttonObj2=new Button("Replace");
buttonObj3=new Button("Exit");
labObj1=new Label("文本区域:");
labObj2=new Label("待查找或替换前的字符串:");
labObj3=new Label("替换后的字符串:");
pObj1=new Panel();
pObj2=new Panel();
pObj3=new Panel();
pObj4=new Panel();
pObj5=new Panel();
pObj1.setLayout(new BorderLayout());//先设置布局,再添加和组件
pObj1.add("North",labObj1);
pObj1.add("Center",taObj);//BorderLayout中"CENTER"大小会随窗口的大小改变
pObj2.setLayout(new BorderLayout());
pObj2.add("North",labObj2);
pObj2.add("Center",tfObj1);
pObj3.setLayout(new BorderLayout());
pObj3.add("North",labObj3);
pObj3.add("Center",tfObj2);
pObj4.setLayout(new FlowLayout(FlowLayout.CENTER,20,20));
pObj4.add(buttonObj1);//(20,20)?前者指对象间水平间距,后者指对象距上边界的距离
pObj4.add(buttonObj2);
pObj4.add(buttonObj3);
pObj5.setLayout(new GridLayout(3,1));//(3,1)3行,1列的等大小布局
pObj5.add(pObj2);
pObj5.add(pObj3);
pObj5.add(pObj4);
frObj.setLayout(new GridLayout(1,2));
frObj.add(pObj1);
frObj.add(pObj5);
buttonObj1.addMouseListener(this);//监听者this指当前对象buttonObj1
buttonObj2.addMouseListener(this);//监听者为实现了相应接口的类对象
buttonObj3.addMouseListener(this);
frObj.addWindowListener(this);
frObj.setSize(400,260);
frObj.setVisible(true);
diaObj=new Dialog(frObj);//***参数是Frame对象***实现Frame和Dialog之间的通信
diaObj.setLayout(new FlowLayout(FlowLayout.CENTER,40,20));
textLab=new Label("");
diaObj.add(textLab);
diaObj.add(butObj2);
butObj2.addMouseListener(this);
diaObj.setSize(200,100);
//diaObj2使用默认false,而不用diaObj2.setVisible(false);且下方已有:diaObj.show();
}
public void mouseClicked(MouseEvent e){
Button butObj=(Button)(e.getSource());//***(Button)(e.getSource())***
if(butObj.getLabel()=="Exit") //***通过getLabel()可获得Button上的文本***
{
System.exit(0);//关闭窗口
}
if(butObj.getLabel()=="Find"||butObj.getLabel()=="Replace")
{
String strObj1=taObj.getText();//***通过getText()可获得TextArea或TextField中的文本内容***
String strObj2=tfObj1.getText();
int matchNum=0;
int cursorPos=taObj.getCaretPosition();//***通过getCaretPosition()可获得TextArea等中的光标位置***
matchFun classObj=new matchFun();//***自定义类matchFun***
if(butObj.getLabel()=="Find")
{
matchNum=classObj.strFind(strObj1,strObj2,cursorPos);
textLab.setText("共找到"+matchNum+"处");
diaObj.show();//隐藏,触发,计算,设值,显示
}
if(butObj.getLabel()=="Replace")
{
String strObj3=tfObj2.getText();
matchNum=classObj.strReplace(strObj1,strObj2,strObj3,cursorPos);
textLab.setText("共替换到"+matchNum+"处");
StringBuffer taText=classObj.repStr;//***
taObj.setText(taText.toString());//***
diaObj.show();//***
}
}
if(butObj.getLabel()=="OK")
{diaObj.hide();
frObj.show();
}
}
public void mouseEntered(MouseEvent e){}//***具体的使用方法及其效果?
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void windowClosing(WindowEvent e ){//***用于窗口控制
System.exit(0);
}
public void windowOpened(WindowEvent e){}
public void windowIconified(WindowEvent e){}//***具体的使用方法及其效果?
public void windowDeiconified(WindowEvent e){}
public void windowClosed(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowDeActivated(WindowEvent e){}
}
/*类matchFun用于处理有关字符串查找和替换算法*/
class matchFun{
StringBuffer repStr;
public int strFind(String s1,String s2,int pos)
{
int i,j,k=0;
i=pos;
j=0;
while(i<s1.length()&&j<s2.length())
{
if(s1.charAt(i)==s2.charAt(j))
{
++i;++j;
if(j==s2.length())
{
k+=1;
i=i-j+1;
j=0;
}
}
else{i=i-j+1;j=0;}
}
return k;
}
public int strReplace(String s1,String s2,String s3,int pos){
int i,j,k=0;
i=pos;
j=0;
repStr=new StringBuffer(s1);//***为了使用replacea()方法,且repStr被申明为实例量。
while(i<repStr.length()&&j<s2.length())
{
if(repStr.charAt(i)==s2.charAt(j))
{ ++i;++j;
if(j==s2.length())
{
k=k+1;
repStr.replace(i-j,i,s3);//***replace(i-j,i,s3),i-j:起始位置,i:结束位置,s3:替换字符串
j=0;
}
}
else{i=i-j+1;j=0;}
}
return k;
}
}
分享到:
相关推荐
Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...
HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...
这个“java课件(完整版)+完整源程序代码”提供的内容涵盖了从Java语言基础到高级特性的全面教程,包括源代码实例,非常适合初学者和进阶学习者深入理解Java编程。 1. **第1章 - Java概述** Java的设计目标是"一次...
Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...
1. **JD-GUI**:这是一个独立的GUI工具,可以直接打开并查看单个Java类的源代码。JD-GUI显示了反编译的结果,便于快速浏览和分析代码。 2. **JAD**:Java反汇编器,也提供了GUI版本。JAD不仅可以反编译类,还可以...
在本章节"JAVA语言程序设计-第十二章 高级用户界面GUI设计"中,我们将深入探讨Java如何创建美观且功能丰富的图形用户界面(GUI)。GUI是计算机软件中与用户进行交互的一种方式,使得非程序员也能轻松操作应用程序。...
Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...
Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...
5. **异步处理**:如果数据量较大,更新下拉框内容可能需要一定时间,这时可以考虑使用异步处理,避免阻塞主线程,提高用户体验。Java 8引入了`CompletableFuture`,可以方便地进行异步编程。 6. **数据绑定**:...
虽然反编译不能完全恢复原始的源代码,但它可以提供一个接近原始代码的表示,帮助开发者理解程序的执行逻辑。 **jd-gui工具的特点与使用** jd-gui是一款图形用户界面(GUI)的Java反编译工具,其主要特点包括: 1...
Java反编译是开发者在分析或逆向工程Java应用程序时常用的一种技术,它允许我们将已编译的.class文件转换回可读的源代码形式。"jd-gui绿色版"是一款非常实用的Java反编译工具,它以其轻量级、无需安装、绿色安全以及...
Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...
Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...
Java反编译是软件开发过程中一个重要的技术环节,主要用于查看和理解Java字节码,将已编译的.class文件转换回可读性较高的源代码形式。在Java开发中,这通常用于逆向工程、学习开源库的工作原理或者调试无法获取源...
Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...
这个“java swing小程序”压缩包很可能包含了一些示例代码,可以帮助初学者或者开发者更好地理解和掌握Java Swing的相关知识。下面将详细讨论Java Swing的主要组件、特性以及如何通过这些小程序进行学习。 Java ...
#### 第一章 Java语言基础 **1.1 JAVA语言的主要特点及执行过程** - **主要特点**: - **跨平台性**:编写一次,到处运行(Write Once, Run Anywhere)是Java的核心优势之一。Java通过JVM实现了这一特性。 - **...
反编译工具能够将已编译的Java字节码(.class文件)转换回可读的源代码,便于理解程序的工作原理。本文将详细介绍三种常用的Java反编译工具:jd-gui、xjad以及cavaj,并探讨它们的特点和应用场景。 1. **jd-gui** ...
"jd-gui-win-1.6.6"是一款专为Windows系统设计的JD-GUI软件,它提供了一个直观的图形用户界面,使Java程序员能够快速地反编译并查看.class文件,从而揭示隐藏在二进制代码背后的源代码逻辑。 JD-GUI的主要特点和...
这些工具不仅能够快速地将字节码转换回可读的Java源代码,还提供了方便的界面,便于开发者查看和分析代码结构。 JD-GUI是一款独立的图形化应用程序,可以直接打开.class文件并显示其源代码。它支持拖放操作,方便...