您的位置:首页 > 编程语言 > Java开发

用JAVA 实现图像化的模式串匹配并于文本区显示颜色

2017-10-15 16:24 471 查看
首先是KMP算法,下面是代码,关于这个算法这个网址写的是我见过的最清楚基础明白的,适合初学:http://blog.csdn.net/arronxu1989/article/details/12857507 (CSDN)

KMP_method.java

public class KMP_method {
public int[] getNext(char[] s)
{
int length=s.length;
int[] next=new int[length+1];
char[] tempChar=s;
for(int i=1;i<length;i++)
for(int j=0;i<i;j++)
for(int k=0;k<=j;k++)
{
if(tempChar[k]!=tempChar[i-j+k])
break;
if((k==j)&&k>=next[i])
next[i]=k+1;
}
return next;
}

public int find(char[] src,char[] ch)
{
if(src==null||ch==null)
return -1;
int len1=src.length;
int len2=ch.length;
int[] next=getNext(ch);
System.out.println("src len is:"+len1+'\n'+"pattern len is:"+len2);
int i,j;
for(i=0;i<len1-len2;){
for(j=0;j<len2;++j)
{
if(src[i+j]!=ch[j])
{
if(src[i+j]==' ')
{
i+=j>0?j:1;
System.out.println("i is:"+i);
break;
}
else
{
i+=(j-ch[j])>1 ? (j-ch[j-1]):1;
System.out.println("i is:"+i);
break;
}
}
if(j==len2-1)
{
return i;
}
}
}
return -1;
}

}

接下来是读取文件 txt2string.java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class txt2string {

public String fun(File file)
{
StringBuilder result=new StringBuilder();
try{
BufferedReader br=new BufferedReader(new FileReader(file));
String s=null;
while((s=br.readLine())!=null){
result.append(s);
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
return result.toString();
}

}


再则是布局文件和相应事件

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileReader;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.SwingConstants;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;

public class SimpleFrame extends JFrame{

private final int DEFAUFLT_WIDTH=300;
private final int DEFAULT_HEIGHT=200;

public SimpleFrame()
{
// setSize(DEFAUFLT_WIDTH,DEFAULT_HEIGHT);

final JTextField textField=new JTextField();

JPanel northPanel=new JPanel();
northPanel.setLayout(new GridLayout(2,2));
northPanel.add(new JLabel("请输入模式串:",SwingConstants.LEFT));
northPanel.add(textField);
add(northPanel,BorderLayout.NORTH);

final JTextPane textPane=new JTextPane();
textPane.setPreferredSize(new Dimension(DEFAUFLT_WIDTH,DEFAULT_HEIGHT));
JScrollPane scrollPane=new JScrollPane(textPane);
add(scrollPane,BorderLayout.SOUTH);

JPanel centerPanel=new JPanel();
centerPanel.setLayout(new GridLayout(1,2));
JPanel centerPanel_left=new JPanel();

JButton loadButton=new JButton("LOAD");
centerPanel_left.add(loadButton);
loadButton.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
txt2string txt=new txt2string();
File file=new File("rec.txt");

//设置字体大小
SimpleAttributeSet attrset = new SimpleAttributeSet();
StyleConstants.setFontSize(attrset,15);
Document docs = textPane.getDocument();//获得文本对象
try {
docs.insertString(docs.getLength(),txt.fun(file), attrset);//对文本进行追加
} catch (BadLocationException e) {
e.printStackTrace();
}

}
});
centerPanel.add(centerPanel_left);
JPanel centerPanel_right=new JPanel();
JButton findButton=new JButton("FIND");
findButton.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
KMP_method kmp_method=new KMP_method();
String src1=textPane.getText();
char[] src=src1.toCharArray();
String ch1=textField.getText();
char[] ch=ch1.toCharArray();
int temp=kmp_method.find(src, ch);
int findId=9999;
if(temp!=-1)
findId=temp;
System.out.println(findId);
StyledDocument document = textPane.getStyledDocument();
MutableAttributeSet attributes = new SimpleAttributeSet();
StyleConstants.setForeground(attributes, Color.blue);
document.setCharacterAttributes(findId, ch.length, attributes, false);

}
});
centerPanel_right.add(findButton);
centerPanel.add(centerPanel_right);
add(centerPanel,BorderLayout.CENTER);

pack();
}
}

最后是客户端程序Client.java
import java.awt.EventQueue;

import javax.swing.JFrame;

public class Client {
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
SimpleFrame frame=new SimpleFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}


效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐