文字列置換(html escape)ツールの例
特定の文字列を変換(html escape)するツールを作ってみましょう
というお題、考えてみたでしょうか?
毎度、イガジーです。
クリップボードを使う文字列のコピペサンプルとして
ソースを持っておくと、何かと役に立つと思います。
という訳で、さっそく回答例を書いておきます。
これはひとつの例ですから、多少異なっていても、きちんと動けば正解です。
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
public class HtmlEscape extends Frame {
private static final long serialVersionUID = 1L;
TextArea ta;
Clipboard clp;
String blb[]={
"Paste",
"Encode",
"Decode",
"Copy",
"End"
};
ActionListener al[]={
new PasteC(),
new HEnc(),
new HDec(),
new CpyC(),
new SysEnd()
};
int btnum=blb.length;
Button b[]=new Button[btnum];
HtmlEscape(){
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev) {
System.exit(0);
}
});
this.setTitle("HtmlEscape");
clp=Toolkit.getDefaultToolkit().getSystemClipboard();
Panel pb=new Panel();
pb.setLayout(new FlowLayout());
ta=new TextArea();
for (int i=0;i<btnum;++i){
b[i]=new Button(blb[i]);
b[i].addActionListener(al[i]);
pb.add(b[i]);
}
this.add(ta,BorderLayout.CENTER);
this.add(pb,BorderLayout.SOUTH);
this.setSize(400,400);
this.setVisible(true);
}
public static void main(String[] args) {
new HtmlEscape();
}
class CpyC implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
StringSelection ss=new StringSelection(ta.getText());
clp.setContents(ss, ss);
}// actionPerformed
} // class CpyC
class PasteC implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
try {
ta.setText((String) clp.getData(DataFlavor.stringFlavor));
} catch (UnsupportedFlavorException e1) {
// e1.printStackTrace();
// do nothing
} catch (IOException e1) {
e1.printStackTrace();
}
}// actionPerformed
} // class PasteC
class HEnc implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
String ss=ta.getText();
ss=ss.replaceAll("&", "&");
ss=ss.replaceAll(">", ">");
ss=ss.replaceAll("<", "<");
ta.setText(ss);
}
}
class HDec implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
String ss=ta.getText();
ss=ss.replaceAll(">", ">" );
ss=ss.replaceAll("<", "<" );
ss=ss.replaceAll("&","&" );
ta.setText(ss);
}
}
class SysEnd implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
}
}
いつもはimportを省略するのですが、今回は含めています。
ボタンが5つあるのですが、似たような処理を5回書き下すのが
面倒に思えたので、配列にしてループさせています(5回書き下してもかまいません)。
このソースコードを貼るのに、このツール自身でソースコードの変換
(html escape)をしました。
以前は手作業だったので、変換忘れをした事もありましたが、
今後は大丈夫になる見込みです。
ご意見、ご感想をお持ちの方は、コメントでもメールでもお知らせください。
この記事へのコメントはこちら