^ | 行の先頭 |
[ ] | 指定内の任意の表現 |
例 | [ab] |
aまたはbにマッチする | |
メタ文字 | |
\s | 任意の空白文字(スペース、タブ、改行、復帰)1文字にマッチします。 |
例 | [^\\s] |
先頭の空白文字位置文字にマッチする。 | |
* | 直前にある文字が0回以上繰り返された文字列にマッチします。0回でも可なので直前の文字が存在しなくてもマッチする。 |
2012年8月12日日曜日
正規表現:基本
2012年8月2日木曜日
ライブ配信送信側のJavaプログラム:JMF
受信側プログラムはJMStudioを利用
import javax.media.*; import javax.media.control.*; import javax.media.protocol.*; import javax.media.format.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*; public class TransmitterTest extends JFrame { private MediaLocator mediaLocator = null; private DataSink dataSink = null; private Processor mediaProcessor = null; private Format[] formats = new Format[] { new VideoFormat( VideoFormat.JPEG_RTP ) }; private ContentDescriptor descriptor = new ContentDescriptor( ContentDescriptor.RAW_RTP ); private InputPanel ipanel; private static final int PORT=22224; private Component ctrl; /** Creates a new transmitter frame. */ public TransmitterTest() { super( "Video Transmitter" ); ipanel = new InputPanel(); getContentPane().add( ipanel, "Center" ); pack(); show(); } /** set locator from Capture Device */ public void setLocator() { try { MediaLocator deviceLocator = searchCaptureDevice(); DataSource source = Manager.createDataSource( deviceLocator ); mediaLocator = new MediaLocator( "rtp://" + ipanel.host.getText() + ":" + PORT + "/video" ); mediaProcessor = Manager.createRealizedProcessor( new ProcessorModel( source, formats, descriptor ) ); dataSink = Manager.createDataSink( mediaProcessor.getDataOutput(), mediaLocator ); setControlPanel(); startTransmitting(); } catch (Exception e) { System.err.println( e.toString() ); } } /** Search Capture Device for Video */ public static MediaLocator searchCaptureDevice() { Vector list = CaptureDeviceManager.getDeviceList( new VideoFormat( VideoFormat.YUV ) ); if( list.size() > 0 ) { CaptureDeviceInfo info = (CaptureDeviceInfo)list.elementAt( 0 ); return info.getLocator(); } System.err.println( "No Capture Device" ); return null; } /** set Control */ public void setControlPanel() { ctrl = mediaProcessor.getControlPanelComponent(); getContentPane().add( ctrl, "South" ); pack(); } /** Starts transmitting the media. */ public void startTransmitting() throws IOException { mediaProcessor.start(); dataSink.open(); dataSink.start(); } /** start here */ public static void main(String[] args) { TransmitterTest transmitter = new TransmitterTest(); } /** Input receive host name, port number */ class InputPanel extends JPanel implements ActionListener { public JLabel label = new JLabel( "Receiver Adress:" ); public JTextField host = new JTextField( "", 16 ); public JButton transmit = new JButton( "Transmit" ); InputPanel() { add( label ); add( host ); add( transmit ); transmit.addActionListener( this ); } /** Event Processing */ public void actionPerformed( ActionEvent evt ) { if( evt.getSource() instanceof JButton ) { if( (JButton)(evt.getSource()) == transmit ) { setLocator(); } } } } }
2012年7月11日水曜日
末尾の改行コード削除
正規表現で末尾の文字列を削除する。
Pattern pattern = Pattern.compile("\n$"); Matcher matcher = pattern.matcher("Hello World. Hello World.\n"); String strResult = matcher.replaceAll(""); System.out.println(strResult);
SyntaxHighlighter のバージョンアップ
SyntaxHighlighter を Version: 1.5.1 から version 3.0.83 にバージョンアップしてみる。
どちらのバージョンからの文法でも動くようにする。
どちらのバージョンからの文法でも動くようにする。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>dp.SyntaxHighlighter Tests</title> <script type="text/javascript" src="scripts3/shCore.js"></script> <script type="text/javascript" src="scripts3/shLegacy.js"></script> <script type="text/javascript" src="scripts3/shBrushJava.js"></script> <link type="text/css" rel="stylesheet" href="styles3/shCoreDefault.css"/> </head> <body> <pre name="code" class="java"> function helloSyntaxHighlighter() { return "hi!"; } </pre> <pre class="brush: java;"> function helloSyntaxHighlighter() { return "hi!"; } </pre> <script type="text/javascript"> SyntaxHighlighter.all(); dp.SyntaxHighlighter.HighlightAll('code'); </script> </body> </html>
function helloSyntaxHighlighter() { return "hi!"; }
function helloSyntaxHighlighter() { return "hi!"; }
2012年7月3日火曜日
ライブ配信受信側のJavaプログラム:JMF
送信側は JMStudio を使って、USBカメラの映像を送信する。
送信の設定は ライブ配信テスト:JMF で確認。
送信の設定は ライブ配信テスト:JMF で確認。
import javax.media.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; /** Media Frame */ public class ReceiverTest extends JFrame { private Player player = null; private InputPanel ipanel; private Component canvas; private Component panel; private static final int PORT = 22224; public ReceiverTest() { super( "RTP Receiver" ); ipanel = new InputPanel(); getContentPane().add( ipanel, "North" ); pack(); } /** start play */ public void startPlayer() { try { MediaLocator locator = new MediaLocator( "rtp://" + ipanel.host.getText() + ":" + PORT + "/video" ); player = Manager.createRealizedPlayer( locator ); canvas = player.getVisualComponent(); if ( canvas != null) { getContentPane().add( canvas, "Center" ); } panel = player.getControlPanelComponent(); if ( panel != null) { getContentPane().add( panel, "South" ); } pack(); player.start(); } catch (Throwable t) { t.printStackTrace(); } } /** start here */ public static void main(String[] args) { try { ReceiverTest frame = new ReceiverTest(); frame.show(); } catch (Throwable t) { t.printStackTrace(); } } /** Input receive host name, port number */ class InputPanel extends JPanel implements ActionListener { public JLabel label = new JLabel( "Transmitter Adress:" ); public JTextField host = new JTextField( "", 16 ); public JButton receive = new JButton( "Receive" ); InputPanel() { add( label ); add( host ); add( receive ); receive.addActionListener( this ); } /** Event Processing */ public void actionPerformed( ActionEvent evt ) { if( evt.getSource() instanceof JButton ) { if( (JButton)(evt.getSource()) == receive ) { startPlayer(); } } } } }
ライブ配信テスト:JMF
JMF をインストールしたときに入っている、JMStudio でライブ配信テストをやってみる。
怒涛のめもめもリンク集
JMF: JMStudioでRTP試し に詳しく解説してある。
JMStudio で送信側と受信側のテストが出来る。
一台のパソコンで送信側と受信側のテストをしてみる。
送信側の設定
JMStudio を起動させて、File から Transmit.. を選択する。
Caputure..をクリックする。
OK をクリックする
Next>> をクリックする。
Next>> をクリックする。
Finish をクリックする。
送信を確認する画面が表示される。
受信側の設定
JMStudio をもう一回起動させる。
File から Open RTP Session..をクリックする。
アドレスを入力して Open をクリックする。
送られた画像が表示された。
怒涛のめもめもリンク集
JMF: JMStudioでRTP試し に詳しく解説してある。
JMStudio で送信側と受信側のテストが出来る。
一台のパソコンで送信側と受信側のテストをしてみる。
送信側の設定
JMStudio を起動させて、File から Transmit.. を選択する。
Caputure..をクリックする。
OK をクリックする
Next>> をクリックする。
Next>> をクリックする。
送信を確認する画面が表示される。
受信側の設定
JMStudio をもう一回起動させる。
File から Open RTP Session..をクリックする。
アドレスを入力して Open をクリックする。
送られた画像が表示された。
javaでUSBカメラを使う:JMF
JMF をインストールしたときに入っている、JMStudio でUSBカメラが利用できるか確認してみる。
JMStudio を起動させる。
ファイルから Cupture を選択する
OKをクリックする。
USBカメラの映像が表示される
USBカメラが利用出来る事が確認できたので、今度はJava プログラムから利用してみる。
Eclipseにjar追加 C:\Program Files (x86)\JMF2.1.1e\lib の中のjar ファイルをEclipseの メニューのプロジェクト->プロパティー->Java のビルド・パス->ライブラリの外部Jarの追加ボタンから追加する。
プログラムを実行すると、カメラ映像が表示される。
JMStudio を起動させる。
ファイルから Cupture を選択する
OKをクリックする。
USBカメラの映像が表示される
USBカメラが利用出来る事が確認できたので、今度はJava プログラムから利用してみる。
import javax.media.*; import javax.swing.*; public class jmf { public static void main(String args[]) throws Exception { JFrame frame = new JFrame("ImageView"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Player player = Manager.createRealizedPlayer(new MediaLocator("vfw://0")); frame.setBounds(100, 100, 640, 480); frame.getContentPane().add(player.getVisualComponent()); frame.setVisible(true); player.start(); } }
Eclipseにjar追加 C:\Program Files (x86)\JMF2.1.1e\lib の中のjar ファイルをEclipseの メニューのプロジェクト->プロパティー->Java のビルド・パス->ライブラリの外部Jarの追加ボタンから追加する。
プログラムを実行すると、カメラ映像が表示される。
2012年7月1日日曜日
JMFをWindows 7,64bit,Eclipseでインストール
1.jdk 32bit版のインストール
すでに64bit版がインストールしている場合でも、インストールする。
2.JMFをダウンロードしてくる。
ダウンロードサイト:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-client-419417.html#7372-jmf-2.1.1e-oth-JPR
ダウンロードしたファイル:jmf-2_1_1e-windows-i586.exe
ダウンロードしたファイルをダブルクリックしてインストール。
解凍からインストールに進まない場合は、jdk 32bitのインストールが完了していない場合があります。
インストールが完了したらデスクトップにJMStudioのアイコンが表示される。
3.Eclipseにjar追加
C:\Program Files (x86)\JMF2.1.1e\lib の中のjar ファイルをEclipseの
メニューのプロジェクト->プロパティー->Java のビルド・パス->ライブラリの外部Jarの追加ボタンから追加する。
すでに64bit版がインストールしている場合でも、インストールする。
2.JMFをダウンロードしてくる。
ダウンロードサイト:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-client-419417.html#7372-jmf-2.1.1e-oth-JPR
ダウンロードしたファイル:jmf-2_1_1e-windows-i586.exe
ダウンロードしたファイルをダブルクリックしてインストール。
解凍からインストールに進まない場合は、jdk 32bitのインストールが完了していない場合があります。
インストールが完了したらデスクトップにJMStudioのアイコンが表示される。
3.Eclipseにjar追加
C:\Program Files (x86)\JMF2.1.1e\lib の中のjar ファイルをEclipseの
メニューのプロジェクト->プロパティー->Java のビルド・パス->ライブラリの外部Jarの追加ボタンから追加する。
2012年6月13日水曜日
テーブルの作成:Java Sqlite
//テーブルを作成
stmt.execute( "create table data( id INTEGER )" );
//テーブルが無い場合に作成
stmt.execute("create table if not exists data ( id INTEGER )");
stmt.execute( "create table data( id INTEGER )" );
stmt.execute("create table if not exists data ( id INTEGER )");
2012年6月12日火曜日
サーバソケット
import java.io.*; import java.net.*; public class echoServer { public static void main(String args[]) { // ソケットや入出力用のストリームの宣言 ServerSocket echoServer = null; Socket clientSocket = null; String line; BufferedReader is; PrintStream os; // ポート9999番を開く try { //待ち受けポートを指定して新しいサーバソケットを生成しています。 echoServer = new ServerSocket(9999); System.out.println("EchoServerが起動しました(port=" + echoServer.getLocalPort() + ")"); //acceptメソッドを呼び出し、クライアントからの接続待機状態に入ります。クライアントからの接続要求があると、socketにはクライアントとの通信に利用できるSocketのインスタンスが代入されます。 clientSocket = echoServer.accept(); System.out.println("接続されました "+ clientSocket.getRemoteSocketAddress() ); is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); os = new PrintStream(clientSocket.getOutputStream()); // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す while ( (line = is.readLine()) != null ) { System.out.println("受信: " + line); os.println(line); System.out.println("送信: " + line); } } catch (IOException e) { System.out.println(e); } } }
import java.io.*; import java.net.*; public class echoClient { public static void main(String[] args) { // ソケットや入出力用のストリームの宣言 Socket echoSocket = null; DataOutputStream os = null; BufferedReader is = null; // ポート9999番を開く try { echoSocket = new Socket("localhost", 9999); os = new DataOutputStream(echoSocket.getOutputStream()); is = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); } catch (UnknownHostException e) { System.err.println("Don't know about host: localhost"); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection to: localhost"); } // サーバーにメッセージを送る if (echoSocket != null && os != null && is != null) { try { // メッセージを送ります os.writeBytes("HELLO\n"); // サーバーからのメッセージを受け取り画面に表示します String responseLine; if ((responseLine = is.readLine()) != null) { System.out.println("Server: " + responseLine); } // 開いたソケットなどをクローズ os.close(); is.close(); echoSocket.close(); } catch (UnknownHostException e) { System.err.println("Trying to connect to unknown host: " + e); } catch (IOException e) { System.err.println("IOException: " + e); } } } }
2012年5月26日土曜日
SQLlite:グループ化
検索対象データベース
集計関数
MAX 最大値
MIN 最小値
AVG 平均値
COUNT データの個数
合計(Sum)
name別にpriceの合計を計算して表示
結果:
name = いちご
price = 110
name = りんご
price = 201
データの個数(Count)
結果:
name = いちご
count= 1
name = りんご
count= 2
複数の集計関数を指定
結果:
name = いちご
合計 = 110
平均 = 110.0
name = りんご
合計 = 201
平均 = 100.5
列名の指定(AS)
特定の集計行のみの表示(HAVING)
結果:
name = りんご
合計 = 201
集計関数
MAX 最大値
MIN 最小値
AVG 平均値
COUNT データの個数
合計(Sum)
name別にpriceの合計を計算して表示
ResultSet rs = stmt.executeQuery("SELECT name,Sum(name) FROM data GROUP BY name "); while (rs.next()) { System.out.println("name = " + rs.getString("name")); System.out.println("price = " + rs.getInt(2)); }
結果:
name = いちご
price = 110
name = りんご
price = 201
データの個数(Count)
ResultSet rs = stmt.executeQuery("SELECT name,Count(name) FROM data GROUP BY name "); while (rs.next()) { System.out.println("name = " + rs.getString("name")); System.out.println("count = " + rs.getInt(2)); }
結果:
name = いちご
count= 1
name = りんご
count= 2
複数の集計関数を指定
ResultSet rs = stmt.executeQuery("SELECT name,Sum(price),Avg(price) FROM data GROUP BY name "); while (rs.next()) { System.out.println("name = " + rs.getString("name")); System.out.println("合計 = " + rs.getInt(2)); System.out.println("平均 = " + rs.getFloat(3)); }
結果:
name = いちご
合計 = 110
平均 = 110.0
name = りんご
合計 = 201
平均 = 100.5
列名の指定(AS)
ResultSet rs = stmt.executeQuery("SELECT name,Sum(price) AS '合計' FROM data GROUP BY name "); while (rs.next()) { System.out.println("name = " + rs.getString("name")); System.out.println("合計 = " + rs.getInt("合計")); }
特定の集計行のみの表示(HAVING)
ResultSet rs = stmt.executeQuery("SELECT name,Sum(price) AS '合計' FROM data GROUP BY name HAVING Sum(price) > 200 "); while (rs.next()) { System.out.println("name = " + rs.getString("name")); System.out.println("合計 = " + rs.getInt("合計")); }
結果:
name = りんご
合計 = 201
SQLlite:並べ替え
ORDER BY句
カラム名を指定して並べ替え
ResultSet rs = stmt.executeQuery("SELECT * FROM data ORDER BY price ");
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 3
date = 5/23
name = りんご
price = 101
id = 2
date = 5/24
name = いちご
price = 110
ORDER BY句 昇順
ResultSet rs = stmt.executeQuery("SELECT * FROM data ORDER BY price ASC ");
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 3
date = 5/23
name = りんご
price = 101
id = 2
date = 5/24
name = いちご
price = 110
ORDER BY句 降順
ResultSet rs = stmt.executeQuery("SELECT * FROM data ORDER BY price DESC ");
結果:
id = 2
date = 5/24
name = いちご
price = 110
id = 3
date = 5/23
name = りんご
price = 101
id = 1
date = 5/25
name = りんご
price = 100
ORDER BY句 複数カラムの指定
カラム名を指定して並べ替え
ResultSet rs = stmt.executeQuery("SELECT * FROM data ORDER BY price ");
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 3
date = 5/23
name = りんご
price = 101
id = 2
date = 5/24
name = いちご
price = 110
ORDER BY句 昇順
ResultSet rs = stmt.executeQuery("SELECT * FROM data ORDER BY price ASC ");
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 3
date = 5/23
name = りんご
price = 101
id = 2
date = 5/24
name = いちご
price = 110
ORDER BY句 降順
ResultSet rs = stmt.executeQuery("SELECT * FROM data ORDER BY price DESC ");
結果:
id = 2
date = 5/24
name = いちご
price = 110
id = 3
date = 5/23
name = りんご
price = 101
id = 1
date = 5/25
name = りんご
price = 100
ORDER BY句 複数カラムの指定
ResultSet rs = stmt.executeQuery("SELECT * FROM data ORDER BY price,id ");
指定を省略した場合は昇順
text型とimage型の列は指定できない。
2012年5月25日金曜日
SQLlite:検索
検索対象のデータベース
テーブルのデータ表示
ResultSet rs = stmt.executeQuery( "select * from data" );
表示:
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 2
date = 5/24
name = いちご
price = 110
id = 3
date = 5/23
name = りんご
price = 101
WHERE句の使い方
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE name = 'りんご'");
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 3
date = 5/23
name = りんご
price = 101
WHERE句+AND
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE name = 'りんご' AND price = '101'");
結果:
id = 3
date = 5/23
name = りんご
price = 101
WHERE句+OR
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE name = 'りんご' OR price = '110'");
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 2
date = 5/24
name = いちご
price = 110
id = 3
date = 5/23
name = りんご
price = 101
WHERE句+NOT
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE NOT name = 'りんご' ");
結果:
id = 2
date = 5/24
name = いちご
price = 110
WHERE句+比較演算子
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE name = 'りんご' AND price = '100' ");
priceが50以上101未満のデータを抽出
priceのデータ型がINTEGERでないと範囲指定できない。
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE name = 'りんご' AND price > 50 and price < 101 ");
結果:
id = 1
date = 5/25
name = りんご
price = 100
WHERE句+BETWEEN条件
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE price BETWEEN 50 and 100 ");
結果:
id = 1
date = 5/25
name = りんご
price = 100
IN条件
指定した値のリストにマッチするか
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE price IN ( 100 , 110) ");
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 2
date = 5/24
name = いちご
price = 110
LIKE条件
文字の検索条件を指定する。
%は「任意の文字数の任意の文字」
_は「1文字の任意の文字」,_は一文字にマッチ
__ 2文字の任意の文字列
a__b aで始まりbで終わる4文字の文字列
例:
name LIKE 'a%'は、nameがaで始まる任意の長さの文字列
name LIKE 'a%b'は、nameがaで始まりbで終わる任意の長さの文字列
name LIKE 'a_'は、nameがaで始まる2文字の文字列
name LIKE 'a_%b'は、nameが aで始まりbで終わる3文字以上の任意の長さの文字列
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE name LIKE 'り%' ");
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 3
date = 5/23
name = りんご
price = 101
テーブルのデータ表示
ResultSet rs = stmt.executeQuery( "select * from data" );
表示:
Class.forName("org.sqlite.JDBC"); Connection connection = null; // データベースに接続 なければ作成される String databaseFullPass = "jdbc:sqlite:" + "E:/yamato/tvData/test.db"; connection = DriverManager.getConnection( databaseFullPass ); Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery( "select * from data"); while( rs.next() ) { System.out.println("id = " + rs.getInt("id")); System.out.println("date = " + rs.getString("date")); System.out.println("name = " + rs.getString("name")); System.out.println("price = " + rs.getInt("price")); }
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 2
date = 5/24
name = いちご
price = 110
id = 3
date = 5/23
name = りんご
price = 101
WHERE句の使い方
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE name = 'りんご'");
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 3
date = 5/23
name = りんご
price = 101
WHERE句+AND
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE name = 'りんご' AND price = '101'");
結果:
id = 3
date = 5/23
name = りんご
price = 101
WHERE句+OR
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE name = 'りんご' OR price = '110'");
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 2
date = 5/24
name = いちご
price = 110
id = 3
date = 5/23
name = りんご
price = 101
WHERE句+NOT
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE NOT name = 'りんご' ");
結果:
id = 2
date = 5/24
name = いちご
price = 110
WHERE句+比較演算子
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE name = 'りんご' AND price = '100' ");
priceが50以上101未満のデータを抽出
priceのデータ型がINTEGERでないと範囲指定できない。
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE name = 'りんご' AND price > 50 and price < 101 ");
結果:
id = 1
date = 5/25
name = りんご
price = 100
WHERE句+BETWEEN条件
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE price BETWEEN 50 and 100 ");
結果:
id = 1
date = 5/25
name = りんご
price = 100
IN条件
指定した値のリストにマッチするか
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE price IN ( 100 , 110) ");
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 2
date = 5/24
name = いちご
price = 110
LIKE条件
文字の検索条件を指定する。
%は「任意の文字数の任意の文字」
_は「1文字の任意の文字」,_は一文字にマッチ
__ 2文字の任意の文字列
a__b aで始まりbで終わる4文字の文字列
例:
name LIKE 'a%'は、nameがaで始まる任意の長さの文字列
name LIKE 'a%b'は、nameがaで始まりbで終わる任意の長さの文字列
name LIKE 'a_'は、nameがaで始まる2文字の文字列
name LIKE 'a_%b'は、nameが aで始まりbで終わる3文字以上の任意の長さの文字列
ResultSet rs = stmt.executeQuery("SELECT * FROM data WHERE name LIKE 'り%' ");
結果:
id = 1
date = 5/25
name = りんご
price = 100
id = 3
date = 5/23
name = りんご
price = 101
2012年5月24日木曜日
javacコマンドで文字コード指定
D:\lab\Java> javac -encoding UTF-8 Test.java
:16: エラー: この文字は、エンコーディングMS932にマップできません
// TODO 閾ェ蜍慕函謌舌&繧後◆ catch 繝悶Ο繝?け
2012年5月22日火曜日
カッコで囲まれている文字の取得
String regex = "\\((.+?)\\)";//正規表現で指定 String target = "(abc)def(ghi)jkl"; List<String> omaewamoshindeiru = new ArrayList<String>(); Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(target); while (matcher.find()) { omaewamoshindeiru.add(matcher.group(1)); } System.out.println( omaewamoshindeiru.get(0) );//abc
2012年5月17日木曜日
WebDriver:特定のリンクアドレスを取得する
gooで始まるリンクアドレスを取得する。
検索結果:
https://www.google.co.jp/
import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.htmlunit.HtmlUnitDriver; public class firefoxTest { public static void main(String[] args) { WebDriver driver = new HtmlUnitDriver(); // URLを開く driver.get("http://127.0.0.1/~yamato/fx7/WebDriverTest/index.html"); // 検索結果のURLを取得 WebElement link = driver.findElement(By.partialLinkText("goo")); System.out.println(link.getAttribute("href")); } }
検索結果:
https://www.google.co.jp/
WebDriver:ページのリンクを取得する
import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.htmlunit.HtmlUnitDriver; public class firefoxTest { public static void main(String[] args) { WebDriver driver = new HtmlUnitDriver(); // URLを開く driver.get("http://127.0.0.1/~yamato/fx7/WebDriverTest/index.html"); // Aタグを取得 List<WebElement> cheese = driver.findElements(By.tagName("a")); // 取得した要素の0番目のリンクアドレス System.out.println(cheese.get(0).getAttribute("href")); // 取得した要素の0番目のリンクテキスト System.out.println(cheese.get(0).getText()); } }
WebDriver:IDを指定してテキストを取得する
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.htmlunit.HtmlUnitDriver; public class firefoxTest { public static void main(String[] args) { // ブラウザ(Firefox)を起動 // WebDriver driver = new FirefoxDriver(); WebDriver driver = new HtmlUnitDriver(); // URLを開く driver.get("http://127.0.0.1/~yamato/fx7/WebDriverTest/index.html"); WebElement addDynamicElement = driver.findElement(By.id("add")); String actual = addDynamicElement.getText(); System.out.println( actual ); } }
WebDriver:ページのタイトル取得
import org.openqa.selenium.WebDriver; import org.openqa.selenium.htmlunit.HtmlUnitDriver; public class firefoxTest { public static void main(String[] args) { // ブラウザ(Firefox)を起動 // WebDriver driver = new FirefoxDriver(); WebDriver driver = new HtmlUnitDriver(); // URLを開く driver.get("http://127.0.0.1/~yamato/fx7/WebDriverTest/index.html"); System.out.println(driver.getTitle()); } }
WebDriver 準備
selenium-java-2.21.0.zip をダウンロードする。
解凍する。
selenium-java-2.21.0.jar と
libs フォルダのの中のファイルをプロジェクトのjavaビルドパスに追加する。
参考
その他のhtmlテストツール
HtmlUnit
HttpUnit::Httpプロトコルのテストを重視した作り
解凍する。
selenium-java-2.21.0.jar と
libs フォルダのの中のファイルをプロジェクトのjavaビルドパスに追加する。
参考
その他のhtmlテストツール
HtmlUnit
HttpUnit::Httpプロトコルのテストを重視した作り
2012年1月21日土曜日
HTMLEditorKit 基本情報
一行ずつ処理するのに便利
http://java.sun.com/j2se/1.3/ja/docs/ja/api/javax/swing/text/html/HTMLEditorKit.html
クラス HTMLEditorKit.ParserCallback
handleStartTag は、開始タグと終了タグを持つタグを取得する。
handleEndTag は、開始タグと終了タグを持つタグを取得する。
handleSimpleTag は、終了タグを持たないタグを取得する。
handleText は、HTMLの文字列の取得・処理を行います。
handleComment は、コメントを取得する。
handleEndOfLineString は、ストリームの末尾を取得する。
http://java.sun.com/j2se/1.3/ja/docs/ja/api/javax/swing/text/html/HTMLEditorKit.html
クラス HTMLEditorKit.ParserCallback
handleStartTag は、開始タグと終了タグを持つタグを取得する。
handleEndTag は、開始タグと終了タグを持つタグを取得する。
handleSimpleTag は、終了タグを持たないタグを取得する。
handleText は、HTMLの文字列の取得・処理を行います。
handleComment は、コメントを取得する。
handleEndOfLineString は、ストリームの末尾を取得する。
import javax.swing.text.*; import javax.swing.text.html.*; import javax.swing.text.html.parser.ParserDelegator; import java.io.*; public class HtmlParser{ public static void main(String[] args){ HtmlParser p = new HtmlParser(); p.exec(); } public void exec() { Reader reader; try { FileInputStream is = new FileInputStream("E:/html/text.html"); InputStreamReader in = new InputStreamReader(is, "SJIS"); reader = new BufferedReader(in); MyParserCallback cb = new MyParserCallback(); ParserDelegator pd = new ParserDelegator(); pd.parse(reader, cb, true); reader.close(); } catch (Exception e) { e.printStackTrace(); } } class MyParserCallback extends HTMLEditorKit.ParserCallback { public void handleStartTag(HTML.Tag tag, MutableAttributeSet attr, int pos){ System.out.println("スタートタグが呼ばれました"); } public void handleText(char[] data, int pos) { System.out.println( new String(data) ); } public void handleSimpleTag(HTML.Tag tag, MutableAttributeSet attr,int pos) { System.out.println("-------------- 終了タグを持たないタグが呼ばれました"); } } }
登録:
投稿 (Atom)