📄 lzw.java
字号:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableColumn;
public class LZW extends JFrame{
String ss = "ababababababaabbb";
ArrayList<String> Kdir = new ArrayList<String>();
ArrayList<String> dir = new ArrayList<String>();
ArrayList<String> fandir = new ArrayList<String>();
ArrayList<Integer> p = new ArrayList<Integer>();
JLabel zifu=new JLabel("请输入要编码的字符串");
JTextField tzifu=new JTextField();
JTextField rtzifu=new JTextField();
JButton bianma=new JButton("编码");
JButton send=new JButton("发送");
Object[][] pp={{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}} ;
void view(){
this.setLocation(100, 100);
this.setSize(500,350);
this.setVisible(true);
this.addWindowListener(new MyWindowMonitor());
this.setLayout(null);
zifu.setBounds(10, 10, 150, 30);
tzifu.setBounds(160, 10, 200, 30);
bianma.setBounds(10, 70, 80, 20);
rtzifu.setBounds(160, 70, 200, 30);
send.setBounds(370, 70, 80, 20);
this.add(zifu);
this.add(tzifu);
this.add(bianma);
this.add(rtzifu);
this.add(send);
String[] n = { "压缩码", "源码" };
TableColumn column = null;
JTable table = new JTable(pp, n);
table.setPreferredScrollableViewportSize(new Dimension(550, 80));
table.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
for (int i = 0; i <2; i++) {
// 利用 JTable 中的 getColumnModel()方法取得 TableColumnModel 对象;再利用
// TableColumnModel 界面所定义的 getColumn()方法取
// TableColumn 对象,利用此对象的 setPreferredWidth()方法就可以控制字段的宽度.
column = table.getColumnModel().getColumn(i);
if ((i % 2) == 0)
column.setPreferredWidth(100);
else
column.setPreferredWidth(50);
}
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setBounds(10, 100, 350, 250);
this.add(scrollPane);
Lisbianma b1= new Lisbianma();
Lissend b2 =new Lissend();
bianma.addActionListener(b1);
send.addActionListener(b2);
}
class MyWindowMonitor extends WindowAdapter {
public void windowClosing(WindowEvent e) {
setVisible(false);
// notconnect();
System.exit(0);
}
}
class Lisbianma implements ActionListener{
public void actionPerformed(ActionEvent e) {
Kdir.clear();
p.clear();
String s=tzifu.getText();
for(int i=0;i<s.length();i++){
String ax=s.substring(i,i+1);
int count=0;
for(int j=0;j<Kdir.size();j++){
if(ax.equalsIgnoreCase(Kdir.get(j))){
count++;
}
}
if(count==0){
Kdir.add(ax);
}
}
bianyi(Kdir,s);
String xianshi="";
for(int i=0;i<p.size();i++){
xianshi=xianshi+p.get(i);
}
rtzifu.setText(xianshi);
for(int i=0;i<Kdir.size();i++){
pp[i][0]=i;
pp[i][1]=Kdir.get(i);
}
repaint();
}
}
class Lissend implements ActionListener{
public void actionPerformed(ActionEvent e) {
new send(Kdir,p).view();
}
}
void bianyi(ArrayList<String> dir,String s){
for(int i=0;i<s.length();){
Character ex=s.charAt(i);
System.out.println(ex);
int count = 0;
int xuanding=0;
for(int j=0;j<dir.size();j++){
int flag = 0;
int k = dir.get(j).length();
if(i+k>s.length()){
flag++;
}
else{
String ax=s.substring(i,i+k);
if(ax.equalsIgnoreCase(dir.get(j))){
}
else{
flag++;
}
}
if(flag==0){
if(dir.get(j).length()>count){
count = dir.get(j).length();
xuanding = j;
}
}
}
i=i+count;
String ss= dir.get(xuanding);
p.add(xuanding);
if(i<s.length()){
ss=ss+s.charAt(i);
dir.add(ss);
}
//字符串匹配
for(int x=0;x<dir.size();x++){
System.out.println("dir:"+x+" "+dir.get(x));
}
//System.out.println(xuanding);
}
System.out.println(dir.size());
for(int i=0;i<p.size();i++)
System.out.println(p.get(i));
}
public static void main(String[] args) {
new LZW().view();
//dir.add("a");
//dir.add("b");
//fandir.add("a");
//fandir.add("b");
//LZW s= new LZW();
//s.bianyi(dir);
//s.fanbianyi(dir);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -