これから勉強しなくちゃなあ。まあ備忘録だなあ。。。 「jdk6u29」をDLしたので前のバージョンの「jdk6」をアンインストールしたら,
「NetBeans7」が立ち上がらなくなった,「jdk6u21」がいるという警告が出た。
仕方なく「NetBeans7」を消してオラクルのHPから「jdk-6u29-nb-7_0_1-windows-ml.exe」
をDLし直して戻った。なんだかなあ。
※NetBeansフォルダ内のetcフォルダ内のnetbeans.conf
のJDKのバージョン書換えると問題なく動きます。
jad.exeをダウンロード
jar=zipなので拡張子を変更して解凍する。
jad.exeの置いた場所にclassファイルをすべて置いて,「jad.exe -8 -sjava *.class」
コマンドで実行すれば拡張子がjavaのソースファイルが出来上がる。
コマンドプロンプト画面にファイルをD&Dすると,そのディレクトリが表示されるので,
ファイル名だけ消して,CDコマンド打ち込めばそのディレクトリにすぐ行ける。
Java decompilerを見つけたが
これが使いやすいが、コメントアウトが表示されない。
0.3.5で日本語表記が出るようになった。
JadClipseコレはeclipseに表示させられるので便利、
「インポート」→「JavaEE」→「アプリケーションクライアントJARファイル」でjarファイル選択。
結局これが最強 2013/10/7そうでも無いようだeclipse4系からデコンパイラが変更されたせいで、ちゃんと変換できていないトコがある。
※JadClipseは4.2系では廃止になり、代わりに、JD-Eclipse に変更された。
クラスファイルの上で右クリック→ 次でクラスを開く→ 逆コンパイルを使用可能にする にチェックしておく
Eclipse4.2でJD-EclipseでデコンパイルできないAdd Star
上記のサイトでwebサイトからJD Eclipseを新規インストールする方法があり、その通りすると、
「インポート」→「JavaEE」→「アプリケーションクライアントJARファイル」でjarファイル選択。
のやり方でImportedClassesが表示され、中にclassファイルが入っている。
ただし「unicode」に注意、「utf-8」と「MS932(マイクロソフト標準フォント)」を切り替えないと
日本語の文字化けが起こる。
人の書いたプログラムを見るのが上達への早道だ。
「jode」の場合((クラス名)this)この書き方が多様されるが「jad」の場合は省略される。
普通はキャスト変換だが、この場合は「this」がクラスのフィールドにアクセスする意味らしい。
使い慣れるとソースが短くなるようだ。参考HP
2017年現在 もはや他人のプログラムの逆コンパイルをする必要性もなかなか無い
ネット上にサンプルプログラムが山ほど出ているのでそれを拾って組んだほうが効率いいだろな
作ったjarファイル内にソースファイルである.javaファイルが無ければclassファイルを直接編集できないので、
なるべくエクスポートする時にソースファイルを含めるにチェックを入れて配布して欲しいが、なかなか
そうは上手くいかない時の対処方法として、自分で.javaファイルを作るしか無い。
jarファイルを「インポート」→「JavaEE」→「アプリケーションクライアントJARファイル」でjarファイル選択して
プロジェクトをつくり中の.classファイルを一つ一つ見て同じフォルダ内に同名の.javaファイルを作り、
その中に.classからソースをコピペしていく、ファイル数が膨大だと地獄の作業になる、
なんかいい方法ないかなあ。。。逆コンパイルもeclipse4系がうまく機能しない、
Java decompilerの方がまだマシのようだ。
IDEは「eclipse」の方が「NetBeans」より補完機能がいい感じがする。
しかしGUIアプリを作る場合は「NetBeans」の方が便利みたいだ。
fontはIPAゴシックに変えてみたが、
最近メイリオに変えた、やっぱり見やすい。
Javadocの中のクラスを調べる時に探三郎を使うと楽になる。
あとJavaDoc Filterも便利に検索が使える
2017-4 現在
JavaSE7ドキュメント 日本語リファレンス
JavaSE8ドキュメント 日本語リファレンス
JavaFX8ドキュメント 日本語リファレンス
DLしてNetbeansで日本語版を使いたい場合
「Javaプラットフォーム」→「Javadoc」にJavaSE8とJavaFX8のファイルを設定し
「Javaプラットフォーム」→「ソース」部分の物を削除すれば読み込める
適当なファイルをzipに圧縮してソースに登録しておけば
起動時に自動で大元のsrc.zipを読みにいかないみたい。
これで便利になった。
JavaSEとJavaFXどちらの補完も日本語化出来るのでいい
JavaDocで簡単にクラスの検索が出来る方法がある
JavaDoc Filter これをお気に入りに追加してリンク先のURLをプロパティの中に
書き込むとJavaDocを開いてからクリックすると検索窓が出る
JavaDoc Filter (Google Chrome Extension) のもあるこれはクローム用の
エクステンションである Firefox系だと上記の方がいい
どのバージョンでもJavafxでもすべてのリファレンスで使える
もっと的確に検索したい場合のツールとして
これはローカルにダウンロードしたファイル内部のワードを全文検索してくれる
強力なツール 説明文からでもクラスを調べることが出来るので便利
ただ最初に読み込みファイルを設定しておかなくてはいけない
Javadocにも使える
「JARファイル」から「exeファイル」への変換は、やっといたほうがjavaっぽくなくていいな 、
しかしwindowsに依存するが。。。
exewrapかJSmoothかLaunch4j を使うとjarからexeファイルに変換できる。
「exewrap」はコマンドラインで操作、「exewrap.exe -t 1.6 -g -i xxx.ico zzz.jar 」と打ち込む。
jre1.6 とアイコン設定をしている。
ファイル拡張子がicoのものしかダメなようだ。
Javaはデフォルトでバーにコーヒーアイコンが出るのが嫌だ、よって変更する、
アイコンをsrcフォルダに入れて(必ずしもsrcフォルダではなく、無い場合もあるので、
なるべくクラスファイルと同じフォルダに入れると良いみたいだ)プログラム中に
JFrame frame = new JFrame();
URL url = frame.getClass().getResource("xxx.png");
frame.setIconImage(Toolkit.getDefaultToolkit().createImage(url));
こんな感じで入れてやればいいらしい、まだわかっていないが、何とか出来た。
[検査済みプロジェクトの出力フォルダーをすべてエクスポート]と
[Javaソース・ファイルとリソースをエキスポート]にチェックを入れないとダメな場合がある。
上記のプログラムをmain文の中に書かなくてはいけないみたいだ、気がつくまでエラーと格闘した。
JavaはPNG、JPEG、GIF、の3形式の画像を読めるが、
アイコンの場合なぜかGIFでは表示できない画像形式があるので、
なるべくPNGにしたほうがいいようだ。
デフォルトのjavaのGUI表示が好きではないので、
Look&FeelをNimbusに変更する場合frameメソッド内に以下を記述すればいいみたい。
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
// すでにframe が表示している場合は、その中のすべてのUIを更新する。
SwingUtilities.updateComponentTreeUI(frame);
}
catch (Exception ex) { System.out.println(ex); }
ただしフリーのLook&Feelを使う時は、完全に対応していない場合もあるので注意。
NetBeansでのGUI変更は簡単、mein文の中のNimbusのところにMetal とかCDE/Motifなんかを
変えて入れてやるだけで変更できる。
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
}
javaで作ったソフトを日本人用は日本語で外国人用では英語で作りたい場合、
ResourceBundle.getBundle(“sample”,Locale.JAPAN); メソッドなどを使うといいみたい。
テキストを読み込んで、JTextAreaに表示させたい場合に文字量が多いと折り返しの設定をするか、
スクロール設定で画面外に出た文字を見るような形になるが、その時にアプリの画面表示が小さい場合、
大きくして引き伸ばそうとするが、デフォルトでは画面のサイズに追随せずに、枠だけが広がる感じになる。
それを追随出来るように設定するには、まずフォームにパネルを置き上にJTextAreaを乗せるのだが、
そのときにフォームの枠いっぱいまでJTextAreaを引き伸ばして貼付けると横幅、縦幅がフォームに
追随して変更されるようになる、ソース的には、
JTextArea.setMaximumSize(Form.getMaximumSize());
となってフォームのサイズをJTextAreaが引取ってくるみたいだ。
実際にはアンカーの設定を、きちんとすればいいみたい。
INT型の多次元配列の場合deepToStringメソッドを使えば要素の中身が表示できる。
間違えてTostringメソッドにしてしまうと格納場所のアドレスが表示される。気づくのに結構はまった。
基本的にJavaの場合Swingに表示するには、文字列はそのまま表示出来るが、数値型の場合、String型に
変換してやらないと表示出来ないため、数値計算したあとの表示処理がめんどくさい、
int型のままで表示出来るようにしてもらいたい。
ファイルを読込む時、書込む時に文字コードを指定できるメソッドは、
InputStreamReaderとOutputStreamWriterの二つだけ、
この二つのメソッドを使う事によって読み込み時、書き込み時の文字化けを避ける事が出来る。
この場合、大体がJREかJDKのバージョンが古いか、無い場合が多いので要確認です。
改行コードによる速度差及び高速化実験
JavaでGUIアプリを作る際、はSwingを利用することが多くなるが、
作成途中ではprintf,print,println等で表示させることもある、
その際に、JTextAreaでは改行に“\n”を使うことが多いが、
printf,print,printlnでは“\r”を使うことも出来る、これは本来改行文字
ではないが、見た目が同じになるので場合によれば使える、
なお“\n”よりも“\r”の方が表示速度が早くなる結果になった。
ちなみに最速はprint+“\r”で表示、ついでprintln+“\r”だった。
ただし使い方には要注意、改行コードはOSごとに依存するので
どこでも使える訳ではないみたい。
JavaでXMLパーサを使う時DOMやSAXは良く知られていると思いますが、
実は3番目のStAXと言うXMLパーサもJavaAPIの中に有るのを知らない人は多いみたい。
StAXはDOMとSAXのイイトコ取りをしたパーサらしいが、自分で速度チェックをしてみた、
実験方法は、ニコ生のコメントをXMLファイルで引取ってきて、それの属性と要素を
読取るという簡単な実験だが一番早かったのがDOMでついでSAX、一番遅かったのがStAX、
という結果になった、ファイル要量は2MB程度のを読込ませて見たが、DOMだと7秒ぐらいで、
パース出来た、一番新しいはずのStAXが悪い結果が出たのはアーキテクチャが複雑になってしまった
結果では無いかと思うが….,それぞれの利点を生かして使うのがいいかも。
ちなみに2MBのファイルをSwingのJTextAreaに表示させようとすると、固まってしまうため、
print,printlnを使って表示させた、Swingはまだまだダメだなあ、、、
よくよく調べて見るとSwingはシングルスレッドが基本らしくて、そのためサーバーからコメント情報を、
取得し続けている間は描画されなくなっていたみたい、よってスレッドプログラミングが必要らしい。
応急処置的にAWTのTextAreaを実装すると描画された、軽くていいね。
結局Runnableをメインの処理にimplementsで対処した。
socket通信時、サーバーからXMLデータをクライアントに受信する時、
SAX,StAXの場合データが無いとNULLで返してくるのに、
DOMの場合データ無しで返してくる時があるので注意が必要だ。
以下のプログラムを実行すると。。。
public void hikaku(){
String a=new String("aaa");
String b=new String("aaa");
if(a.equals(b)){System.out.println("ab同じ値です"); }
else{System.out.println("ab違う値です");}
if(a==b){ System.out.println("ab同じ参照先です"); }
else{System.out.println("ab違う参照先です");}
String c="aaa";
String d="aaa";
if(c.equals(d)){System.out.println("cd同じ値です"); }
else{System.out.println("cd違う値です");}
if(c==d){ System.out.println("cd同じ参照先です"); }
else{System.out.println("cd違う参照先です");}
if(a.equals(c)){System.out.println("ac同じ値です"); }
else{System.out.println("ac違う値です");}
if(a==c){ System.out.println("ac同じ参照先です"); }
else{System.out.println("ac違う参照先です");}
}
結果 ab同じ値です
«ab違う参照先です»
cd同じ値です
«cd同じ参照先です»
ac同じ値です
«ac違う参照先です»
となる、これはnew演算子でオブジェクトを生成し文字列を入れた場合と、
String型の変数に文字列を入れた場合では、値は同じだが、参照する場所は違うという事、
equalsメソッドは参照先の値を見る、=演算子は参照先のアドレスが同じか見る、
Javaの場合メモリの節約により、同じ値の場合はなるべく同じ場所の値を、
利用するようになっているためのようだ。
ちなみにINT型では、
public void hikaku(){
int e=0;
int f=0;
if(e==f){ System.out.println("ef同じ参照先です"); }
else{System.out.println("ef違う参照先です");}
}
結果 «ef同じ参照先です»
String型と同じ結果になる、INT型はequalsメソッドでは比較できないので
=演算子のみで比較している。
以下は配列型の比較であるが、
public void hikaku(){
int[] a={1,2,3};
int[] b={1,2,3};
if(a.equals(b)){System.out.println("ab同じ値です"); }
else{System.out.println("ab違う値です");}
if(a==b){ System.out.println("ab同じ参照先です"); }
else{System.out.println("ab違う参照先です");}
int[] c = {1,2,3};
int[] d = {1,2,3};
if(Arrays.equals(c,d)){System.out.println("cd同じ値です"); }
else{System.out.println("cd違う値です");}
if(c==d){System.out.println("cd同じ参照先です"); }
else{System.out.println("cd違う参照先です");}
}
結果 «ab違う値です»
ab違う参照先です
«cd同じ値です»
cd違う参照先です
配列に対しては、equalsメソッドではなく、Arrays.equalsメソッドを使わないと、
違った答えになってしまうらしい、よくはわかっていないが、
配列は参照扱いになるようだ。
結論として数値型とString型の変数の場合はアドレスが同じになるため、
同一の参照場所が選ばれるが、オブジェクトと配列は必ず別のアドレス領域に、
書き込まれるようだ、よってこれらの事を知っておかないと、
比較プログラムを書く時に間違った判別をさせてしまうことが有りえる。
※同じ参照先であるという事は同じ値であるという事であるが、記憶メモリーの
概念がないプログラマーには理解するのが難しいかもしれない。
public void hikaku(){
String a="\0";
String b=null;
if(a.equals(b)){System.out.println("ab同じ値です"); }
else{System.out.println("ab違う値です");}
if(a==b){ System.out.println("ab同じ参照先です"); }
else{System.out.println("ab違う参照先です");}
System.out.println(a+" : "+b);
}
結果 «ab違う値です»
ab違う参照先です
:null
上記のようにNullと“\0”はPC内部での判断は別物とみなしているので、
初期化の際の利用には気を付けるべきである。出来ればnullで統一させるほうがいいが、
場合によっては“\0”を使わなければならない時もある。
ちなみに““だと空文字で、これも”\0”やnullとは違う認識になるようだ。
netbeansではSWINGがデフォルトでイベントディスパッチ上で動作する?ように、
決められているみたいなので、Threadを最初使ってたが、Runnableでも使えることが、
わかったので、その事を書きとめておく。
Threadの場合
class メインクラス extends javax.swing.JFrame{
}
class 内部クラス extens Thread{
public void run{
ここに処理を書く
}
}
private void ボタンActionPerformed(java.awt.event.ActionEvent evt){
クラス 内部クラスオブジェクト = new クラス();
クラスオブジェクト .start();
}
Runnableの場合
class メインクラス extends javax.swing.JFrame{
}
class 内部クラス implements Runnable{
public void run{
ここに処理を書く
}
}
private void ボタンActionPerformed(java.awt.event.ActionEvent evt){
クラス 内部クラスオブジェクト = new クラス();
Thread スレッドオブジェクト = new Thread(内部クラスオブジェクト);
スレッドオブジェクト .start();
}
本来はメインクラスのフィールドでスレッドオブジェクト生成するのが基本だと思うが、
プログラムによってはボタンアクション内部でオブジェクトを生成しなければ、
処理がきちんと動かないことがあるので、ボタン内部で生成している、
こういうやり方はボタンを押すごとに生成しているためメモリのオーバーフローに
繋がりやすい感じがして気持ちよくないが。。。
Threadの場合、他にextens したいクラスが出てきた時に困るので、
基本的にRunnableを常用してる。 (><
ソケット通信時、サーバーからXMLデータを受信する時、
クライアント側では、
InputStreamReader(Socket.getInputStream(),"UTF-8");
入力ストリーム取得を書くと思うが、もうひとつ、
XMLパーサーの方でも、
new ByteArrayInputStream(string.getBytes("UTF-8"));
パーサーの入力ストリームでも、UTF-8の文字エンコードを
付加しておかないと、ちゃんとXMLデータが受信できない。
もしくは受信出来ているのに、XMLパーサーの所で止まるような
事態になってしまう。
これは各OSプラットフォームのデフォルトエンコードがバラバラ?なので
指定をきちんとしてあげないとダメのようだ。
実際自分の場合、netbeans上ではきちんと動くのに、
jarファイルにしてデスクトップ上で単体で起動させると、
うまく動かなかった、これはnetbeans内部ではUTF-8を、
デフォルトの文字エンコードに指定していたためと考えられる。
あと文字エンコーディング規定により「UTF-8」に統一する方が良さそうだ。
Socket通信(ソケット)で送信する時、OutputStreamWriter を使うのが普通、
しかし送信する時に、PrintWriterを使うことも出来る、自分はこれでハマリました。
OutputStreamWriter でやるべき所をPrintWriterを使ってしまったためにサーバーに対して、
1バイト文字(英数)は送信出来るけど、2バイト文字(日本語、ひらがな、カタカナ、漢字等)が、
送信出来ない罠にハマリました、Socket通信をする時は、必ずOutputStreamWriter を、
使いましょう。
Socket通信時、強制的に切断する事があるが、その際に、Socketと
InputStreamとInputStreamReaderは必ずclose()をしないと、
サーバーからのデータが送られ続けるようだ。
これと同時に確実にclose()させたい場合 グローバル変数にしておいて
tryではなくて finally 内部で確実に止めてやるのが一番安全な方法である
Socket通信時
BufferedReader br=new BufferedReader(
new InputStreamReader(URLConnection.getInputStream(),"UTF-8"));
{ 処理
}
br.close();
こう書くより
InputStream is=URLConnection .getInputStream();
InputStreamReader isr=new InputStreamReader(is,"UTF-8");
BufferedReader br=new BufferedReader(isr);
{ 処理
}
br.close();
isr.close();
is.close();
こう書くほうが、メモリリークの防止になる。
Stream系等と、Buffered系は必ずclose();しないとメモリリークを起こすみたいだ。
Javaで変数の文字列が数字のみかどうかの判断する方法は
if(Hensu.matches("^[\\d]+$")){ }
これで数字のみかどうか判定できる。
Windowsの場合ファイル名に制御文字が使えないので削除しなければいけない場合が,
よくあるその時の記法として
str.replaceAll("[\\00-\\x1f\\x7f]", "");
とすれば制御文字の部分だけ削除できる。
ちなみに複数削除したい場合
str.replaceAll("[\\00-\\x1f]", "").replaceAll("[\\x7f]", "");
と重ねる事ができる。
もっといい方法は,
str.replaceAll("[\\00-\\x1f\\x7f]", "");
と中に連続して書けるみたいだ。
変数.indexOf(検索文字)で調べられる、結果が-1だと無いので、
変数.indexOf(検索文字)!=-1とすれば有るか無いかが判別できる。
Socket通信時、サーバーから取得した情報をJTableに随時表示させようとした所、
JTableの最下行に一番上のバーのようなものが一瞬表示される状態?になり、
見にくくなっていた、これはnetbeansではopaque設定ボタンにチェックを入れてしまっていたため、
おかしくなっていただけのようだ、チェックをはずしてfaulse状態にしておけば、
綺麗に描画されるようになった。
NetBeansの場合jcomboBoxのプロパティ内のselectedindexの番号で表示させたい要素を
選択指定できる、こんな簡単に設定できるとは。。。
UNIX系では「/」のみであるが、Windowsでは「\」「/」両方使用できる、
よって「/」を使えば両方対応できるので、
System.getProperty( "file.separator" );
を わざわざ使う必要は無い。
毎回毎回
System.getProperty("line.separator")
を入れてると行が長くなるなあと、
思ってるとネットに、「こう書け」と書いてあった。
String line_sep=System.getProperty("line.separator");
なるほどこれなら短くなるなあ。
色んな物をアンインストールして、ついでにJDK、JREの古いバージョンも
削除してしまうか、と思い安易に削除すると新しいバージョンのJDK、JREが、
「このソフトウェアは使用中のコンピューターにすでにインストールされています。
再インストールしますか?」と出てきます。はいを押すと
「この操作は現在インストールされている製品に対してのみ有効です。」
と出てまた「このソフトウェアは使用中のコンピューターにすでにインストールされています。
再インストールしますか?」と出てループ状態に陥ります。
そんな時は最終手段、レジストリの削除しかない。
regedit.exeで以下をフォルダ丸ごと消します。
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft
(JavaはWindowsの実行には必要無いのでそんなに危険ではないはず。)
このあとにインストーラを再実行すればインストールできるはずです。
くれぐれも自己責任で、最悪OS再インストールもありかもです。
JDKをインストールしたフォルダの中のBinフォルダの中に
jconsole.exeと、jvisualvm.exeがある、分かりにくいなあ。
*変数や型の宣言時に必ずnullを入れてやる。で使い終わった後もnullを入れてやる(よく使われるトコだけでも良い)。«メインクラスのフィールド変数だけは必ず最初に自動で初期化されるので必要無いみたい。»
*変数などのスコープは出来るだけ狭くする。
*close出来るものは必ずやる、Stream系、Input/Output系、Buffered系、Reader/Writer系、コレクション系等、。
*GCを強制できるならSystem.gc()を入れてやるか、Runtime系もGC入れてやる。
*名無しオブジェクトも、やらないほうがいいかも?GCが反応できないかもしれないので。
*whileやForなどのループ系の中では、なるべく宣言せずに外側でやるようにする。(ループのたびに宣言は良くない為)と考えていたが、内部で宣言したほうがスコープを抜けた時にGCが、変数は使われなくなったと判断しやすいようなので内側で宣言した方がいい時もあるみたいだ。«これはループの内側でしか使わない変数に関してのこと»
*メモリリーク対策の為なら、冗長的な書き方になっても良い。何故なら変数やメソッドに対して、色んなクラスから参照され続けるとGCが動作できずに変数 が削除されない状態におちいる、それを防ぐためコード量が増えたとしても同じ動作のメソッドを流用せずにクラズごとに分けて冗長的に書くなどの工夫が使用 メモリー量を減らせれるようだ。
* Thread.sleep();を入れていくことも有効ぽい、GCがメモリーキャッシュを開放するかの判断時間を与えるといいみたいだ、特にサーバーから 送られてくる大量データーをクライアント側で受けたり、複数クライアントからサーバーへのデーター送信時にメモリーリークで落ちる場合等に有効。
jconsole もjvisualvm もJDKのbinフォルダの中にあるがwindows7の場合そのフォルダ内で、左Shiftを押しながら右クリックすると
そのフォルダのディレクトリからコマンドプロンプトが起動出来るのでそこにjconsoleとタスクマネージャのPID番号を入れて
起動させるとプロファイル出来る、もしくはjvisualvm.exeの上で右クリックから管理者権限で起動を選べばローカルから選択
できるようになる、最近セキュリティーの関係?でjvisualvm ファイルをダブルクリックしただけではローカルに検出されないようだ。
Netbeansからのプロファイルはこんなことしなくていいのだが少し重いのでプロファイルだけしたい場合はjvisualvm が軽くていい。
宣言している自作メソッドや変数(フィールド)のすぐ上で
Eclipseの場合は、
/** + ENTER を押すと、
/**
*
* @param args
*/
という感じでコメントアウトが自動で書き込まれる@の後ろにコメントを書くと補完に追加される。
Netbeansの場合は、
/**
* ここに説明書く<p>
* 2段目</p>
* 3段目<br>
*/
だけのよう。Eclipseの方が便利かな。
<br>か </p>を 文章内に入れると改行になる 補完に追加される。
<p>で段落タグ
ちなみに /* + ENTER を押すと,
/*
*/
だけになる。
入力補完で呼び出し出来るようになるので超便利
Netbeansは、
Alt + Shift + F で一気に指定の規則に整形される。
Eclipseは、
Ctrl + Shift + F で一気に指定の規則に整形される。
例えば文字列 a="1 2 3 4 5" という風に入っている時
これを配列にそのまま入れたのでは空白まで入ってしまうよって
空白は入れずに文字列(数値)を入れたい場合は以下のようにする
例
String aa = a.replaceAll(" ",","); //ここで空白をカンマに全部切り替える
String[] a1 = aa.split(",", 0); //これでカンマで配列に切り分けて入れている
上記のように空白を一度カンマに変更することで空白を入れずに文字だけを配列に
格納することができる
上記の場合文字としてしか入れられないので 数値として扱いたければ
出す時に一つずつキャストしなければいけない
例
int a11 = Integer.parseInt(a1[0]);
このサイトを参考に作ってみる
2017.9 現在 DL出来るサイトは
AbemaTVのFleshの生とアーカイブ
Livetubeの生とアーカイブ
Openrecの生とアーカイブ
2017.12 現在
OpenrecのアーカイブはDL出来なくなった
chromeの拡張機能
videoDownloadhelperがいるもの
Twitchの生とアーカイブ
アフリカTVの生とアーカイブ
Mixerのアーカイブのみ これはいらないかも
DL出来無いサイトは
cavetube
kukulu
FC2
ふわっち
たぶん出来る
ツイッチ
ニコ生
不明サイト
YouTube
Ustream
ShowRoom
Runtime.exec("\\Program Files\\Internet Explorer\\iexplore.exe http://www.goo.ne.jp/");
ブラウザのDirと開きたいURLを半角スペースで区切るだけ 簡単
検索にはjackson-core-xxx.jarを使ってJsonデータを解析する必要がある
上記サイトの Jackson Core から 最新版を選びクリックすると
真ん中あたりにbundleというリンクを押せばDL出来る
Netbeansへの追加方法は プロジェクト直下のフォルダに追加してから
プロパティでライブラリ→コンパイルに追加しておく