1 名前:デフォルトの名無しさん [2008/01/13(日) 00:25:22 ] プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作板をご利用ください。pc10.2ch.net/hp/ 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/ これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、 wikiからのリンクをおたどりください。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド 【初心者】Java質問・相談スレッド110【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1197710566/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝のう存じます。 次スレは>>980 あたりで。
422 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 22:37:39 ] おまいみたいな奴のため
423 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 22:50:47 ] おまいみたいな奴のため と書こうとしたがすでにry
424 名前:デフォルトの名無しさん [2008/01/27(日) 00:50:40 ] コンソールへの文字列出力について教えてください。 7-zipでファイルを圧縮、展開すると下記のようなメッセージが表示されます。 7-Zip 4.57 Copyright (c) 1999-2007 Igor Pavlov 2007-12-06 Scanning Updating archive test.zip Compressing fveupdate.exe Compressing HelpPane.exe Compressing hh.exe Compressing iis7.log Compressing MEMORY.DMP 4% このCompressing <ファイル名>ってのがゾロゾロ表示されて進捗を示すのですが 一番下ってか最新の行にだけ進捗のパーセンテージが表示されるんです。 これをパクりたいのですが、どうすれば良いのか分かりません System.outを調べたのですが、一度表示した行を修正するなんて方法は書いてないですし javaで同じ事をするにはどうすれば良いでしょうか。
425 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 01:06:43 ] \r
426 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 01:11:34 ] \b
427 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 01:16:26 ] linux系だとエスケープでできるけどwinは無理
428 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 01:35:34 ] >>427 ANSI.SYSだっけ、組み込んだらできないかな? やってもないけど、昔コマンドラインでエスケープシーケンス動かそうと思ったら そういう解決方法があったとおもうなぁ。
429 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 01:53:30 ] 以上、まぬけな二人組でした
430 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 04:00:20 ] Windows95,98は標準で組み込まれてるけど2000,XPでは外されたってやつ? それMS-DOSの方じゃなかったかな。
431 名前:デフォルトの名無しさん [2008/01/27(日) 06:34:40 ] \r だろ、フツー。
432 名前:デフォルトの名無しさん [2008/01/27(日) 09:26:23 ] Collection.sortでStringの並びをDBからORDER BYしたものと一致するようにしたいのですが Comparatorでどう実装するでしょうか?
433 名前:デフォルトの名無しさん [2008/01/27(日) 10:47:08 ] DBからORDER BYするときに使うカラムで比較すればいい
434 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 10:59:46 ] 各カラムを別々のコレクションに入れてるならちんぽ
435 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 11:00:47 ] >>432 Stringは java.lang.Comparable を実装してるから Collections.sort(List) が使える。 また、TreeSet 等の実装でもそのまま使うことが出来る。 但し、StringではUnicodeで比較するので、他の文字セットの並び順にする場合は、 そのバイト配列を取得し、比較すること。 Stringを保持するRow を並び替えるときは、ComparatorでString.compareTo等を流用。
436 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 11:05:14 ] 取ってきたときの順序を何らかの方法で覚えておく(Listや順序付きMapに入れるなど)のが一番カタい。(と言うか、俺ならそうする) そもそも order by してないとかだと、DBの比較アルゴリズムを調べてそれと同等なComparatorを自力で実装するしかない。
437 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 16:11:28 ] クラスのprivateに関して質問があるのですが教えていただけないでしょうか? 内容は変数を外部からいじられたくないときにprivateをつけると書いているのですが概要がよくわからないでいます 例えば car.javaに class Car { private int weight; } // コンストラクタ// Car(int weight) { this.weight = weight; } void setWeight(int weight) this.weight = weight; } setcar.javaに Car vitz = new Car(100); vitz.setWeight(200); 外部ファイルからのvitz.setWeightを実行しているのに値が変更できてしまう理由が分からないでいます vitz.setWeight();はvitz内のメソッドとなっているので内部になっているのでしょうか?
438 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 16:15:38 ] private メンバは外部クラスから vitz.weight = 100; とか直接やられないようにするもの。 setWeight() で間接的に変更するのは問題ない。メソッドにしておくことで後で内部構造や 動作に変更があっても Car クラス内で対処できる (ことが多い) から。 public void setWeight(int weight){ this.weight = weight; recalculateWeightBarance(); }
439 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 16:18:15 ] あれ、書き込みショートカット押してしまった orz recalculateWeightBalance(); // 最適なウェイトバランスを再計算 private void recalculateWeightBalance(){ // ... }
440 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 16:32:32 ] Carクラス生成後にweight変数をいじられたくない場合は、セッターメソッドをCarクラスに作らなければよい。 それはクラスを作る人間の自由。
441 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 17:49:39 ] j2sdk1_3_1_21で動作するプログラムを j2sdk1_4_2_16でプログラムを動作させるにはどうすれば良いですか?
442 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 17:51:56 ] コンパイル
443 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 18:09:25 ] コンパイルするとエラーがいっぱい出るんですけど…
444 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 18:13:25 ] 先生:エラーが出たらどうしますか? ゆとり:2ちゃんにエラーがいっぱい出たとカキコします
445 名前:デフォルトの名無しさん [2008/01/27(日) 18:22:17 ] 2ちゃんに書いても解決しない
446 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 19:21:43 ] せめてどんなエラーが出たとか書けよ。学生なんだろうけど。
447 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 19:32:27 ] java使ってるプロジェクトって開発環境がぐちゃぐちゃなの多くてヤダな、なんでだろう。 開発環境さえキチンと整っていれば結構良い言語なのに いままで何回もJAVA案件の仕事したことあるけど、たいていどこのチームもデバッグはSystem.outPrintで変数の中身みてたりする。 時代を逆行してどうすんだと毎回思う。 ぶっちゃけ.netの方が楽だわ。
448 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 19:33:30 ] >>824 あ,この場合「棒」を弄っても「おいなりさん」を弄っても1としてカウントしてね^^
449 名前:448 mailto:sage [2008/01/27(日) 19:33:58 ] すみません誤爆です><
450 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 19:42:46 ] これは良い誤爆
451 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 19:48:02 ] >>447 junit使わないの?
452 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 19:54:11 ] >451 使わないよ
453 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 20:01:37 ] 個人的には.NET、というかMSが出すものの方が 時代に逆行しているように思えることが多いな なんか、かれらは自動化とか全く考慮してくれないし
454 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 20:12:26 ] ビルドの自動化とかやってるじゃないか ExpressEditionばっかり使ってるからそんなこと言うんだよ Team Systemを使いなさい Javaはオープンだけど、その分、いろんなものが出てきて分かりづらくなる .NETならMSのやり方に従うだけでいい 基本的なものは全部スイートに用意されている 逆に言えばMSのやり方に拘束される まぁどっちがいいかは対象とするシステムと要員で決まってくるから、個人がどうこういってもね
455 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 20:25:42 ] >>438 >>440 ありがとうございます 外部内部で考えるのではなく 直接的か間接的かで考えると分かりました
456 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 20:25:46 ] Reporting Servicesとか、どうやってテストの自動化すりゃいいんだよ 教えてくれ
457 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 20:58:06 ] いまどきタダでIDEとデバッガが使えるのに何言ってんだこいつは?
458 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 21:14:40 ] Reporting Services知らない?
459 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 21:20:22 ] まぁJavaスレだしね
460 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 21:34:11 ] Team System使えばReSharper、NUnit、NUnitAspあたりは不必要になるんか? なら検討したいけど、そうじゃないだろ? 結局MSオンリーじゃまともなIDEじゃないんだよ。 そこらへん含めて考えたら、Javaも.NETも大して変わらん。 >456が言うように、Reporting Serviceとかノンコーディングを謳ってるものは 確かにテストの自動化のやりようがないけどな。
461 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 21:45:22 ] Team SystemはテストツールがIDEに組み込まれてるだろ ここで意見が出るか出ないかで判断するより、製品を調査したほうが確実
462 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 21:47:53 ] いや、テストツールが含まれてることは知ってるけど、 ReSharperとかの代わりになるようなものじゃないだろ。 ReSharperはテストだけじゃないし。 そういうのもひっくるめて考えると、 Team Systemだけあっても実際の開発には使えない、って話。
463 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 21:56:42 ] あぁ、そういうことね ReSharperが何者かしらないけど
464 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 22:08:05 ] ReSharperは知っといたほうがいいよ。 ttp://blog.inomata.lolipop.jp/?eid=622557 とりあえず、Day 1とDay 5あたりが導入のきっかけになった。
465 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 22:08:52 ] って、Javaスレでなにやってんだオレ・・・
466 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 02:30:30 ] すいません、質問です。 JRE1.6ってJISX213:2004に対応している?ような事があったと思うんですが WindowsJavaアプリ環境で環境依存文字をUnicodeで取得して それをgetBytes()でSJIS?MS932?どちらかはわかりませんが 環境によって自動取得するときちんと文字が取れずに「?」という風になってしまいます。 JISX213の規格内にSJIS2004ってのもあるんですが、JRE1.6では、こちらには対応していないのでしょうか?
467 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 02:31:57 ] 誰か通訳を
468 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 02:50:31 ] >>466 まずは冷静になってもう一度説明してごらん
469 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 03:19:29 ] というかフォントのエンコードと文字セットのサポートは実装依存だろ。
470 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 03:19:55 ] >>466 疑問自体は非常に興味深いのだが、内容を理解できないところが残念です。 とりあえず、疑問その1に参考資料を用意。 ttp://java.sun.com/javase/ja/6/docs/ja/index.html 機能リファレンスガイド > 基本ライブラリ > その他のパッケージ > 国際化 より。 サポートされているエンコーディング ttp://java.sun.com/javase/ja/6/docs/ja/technotes/guides/intl/encoding.doc.html
471 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 04:36:09 ] スレ違いな感じがするのですが…誘導でもどんなヒントでもいいのでお願いします HPのプルダウンが変更されたらJAVASCRIPTを動かしたいのですが、可能でしょうか?
472 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 04:41:10 ] <select onchange="alert('氏ね');"> <option value="1">1回</option> <option value="2">2回</option> <option value="3">3回</option> </select>
473 名前:471 mailto:sage [2008/01/28(月) 04:46:08 ] >>472 即レスありがとうございます、本当に助かりました! お手数をおかけして済みませんでした 1回、2回、3回は笑ってしまった…w スレ汚し、失礼しました
474 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 08:00:45 ] Javaが提供してる基本クラス数って合計するとどんくらいあるんですか?
475 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 08:53:21 ] 基本クラス?何それ?
476 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 12:20:43 ] >>474 たぶんこれのことか?自分で数えてくれ java.sun.com/javase/ja/6/docs/ja/api/allclasses-frame.html
477 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 12:51:29 ] 失礼します。初心者です。 ユーザーの入力する数値を年月日で区切って取得したいのですが、どのようにすればよろしいでしょうか? 宜しくお願いします。 public static int readBirdate(Scanner kb) { System.out.print("誕生日を入力してください(年 月 日: "); int ubir = kb.nextInt(); return ubir; }
478 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 12:53:40 ] DateFormat df = new SimpleDateFormat("yy'年'MM'月'dd'日'"); Date date = df.parse(ubir);
479 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 13:07:08 ] >>478 ありがとう、ございます!
480 名前:477 mailto:sage [2008/01/28(月) 13:32:15 ] すみません。良いヒントもらったので頑張ってみたけど、やっぱり無理でしたorz 実は宿題でして、ユーザーに今日の日付と誕生日を入力してもらって、年齢を割り出すというプログラムです。 >>477 の式で、 今年: 2008(←入力) 誕生年: 1980(←入力) (計算) 年齢: 28 といった感じで年だけの計算はできるのですが 今日(mmddyyyy): 1 28 2008 誕生日(mmddyyyy): 2 17 1980 といった一度に年月日全ての値を得るやりかたが、どうしても分かりません。 すみません、ご教授お願い致します。
481 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 13:38:12 ] >>480 指示された入力形式は mmddyyyy、入力例が 1 28 2008、 一貫してないのでなんとも。全角半角もごっちゃだし。 スペース区切りならば mmddyyyy は [m]m [d]d yyyy とかすべきじゃね? もしスペース区切りでないのなら、入力例は 01282008 みたいに 最初は0つけないとダメだし、スペースが間に入っちゃメでしょ。
482 名前:477 mailto:sage [2008/01/28(月) 13:54:09 ] >>481 すみません。スペース区切りです。 //出力例 今日の日付を入力してください(mm dd yyyy): 1 28 2008 (←入力) あなたの誕生日を入力してください(mm dd yyyy): 2 17 1980 (←入力) 貴方の年齢は 28才です。 // 支持されている出力例はこんな感じです。
483 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 14:09:50 ] 1980年生まれって誕生日くるまでは 27歳じゃね? 28表示していいのか?
484 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 14:11:20 ] 数え年なんじゃね?
485 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 14:12:55 ] ちなみに、数え年だと29才のはず。
486 名前:477 mailto:sage [2008/01/28(月) 14:13:15 ] 無視してくださいorz
487 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 14:32:24 ] >>477 文字列の取得自体はできるみたいなので、続きだけやるとこんな感じか? //文字列をCalendarに変換 String now, birth; //"1 28 2008" と "2 17 1980" を入力させる。 DateFormat df = new SimpleDateFormat("M d yyyy"); Calendar today = Calendar.getInstance(); today.setTime(df.parse(now)); Calendar birthday = Calendar.getInstance(); birthday.setTime(df.parse(birth)); //Calendarから年齢計算 int age = today.get(Calendar.YEAR) - birthday.get(Calendar.YEAR); birthday.set(Calendar.YEAR, today.get(Calendar.YEAR)); if (today.before(birthday)) age--;
488 名前:477 mailto:sage [2008/01/28(月) 14:35:29 ] >>487 ありがとうございます!やってみますw
489 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 16:13:22 ] JSPを読んでswing系の画面に出すような事は出来るのでしょうか? とりあえずHTMLならJTextPane.setContentType()で表示できるようになるのですが、JSPのスクリプトレットは対応しておらず見る事が出来ません。 何か方法があったら教えてください。 よろしくお願いします。
490 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 16:19:09 ] SWT 使え
491 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 16:44:36 ] JSPってサーバ側で処理するもんでは? それをクライアントで処理したいってこと? 自分で実装するのは大変そうだから、なんか適当なwebサーバ内蔵してループバックでhttpするのが楽かも
492 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 17:06:53 ] そういう意味か。 Tomcat でもビルトインしないとできねぇから、JSP の代わりに 動的な XML + XSL で HTML 作って JTextPane にでも食わせろ。
493 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:49:44 ] public static<T, A> void a(String s) { T data = A.suru(s); } ということをやりたいのですが、エラーが出て実行できません こういうことは出来ないのでしょうか?
494 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:50:50 ] できません
495 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:52:36 ] >>494 出来ませんか… ありがとうございました
496 名前:デフォルトの名無しさん [2008/01/29(火) 01:10:43 ] なにをやりたいんだ? public static T <T> a(String s) { return A.suru(s); } ならまだ意味が解るが・・・
497 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 02:04:02 ] >>496 昨日ファンクタというものを知りまして… それをやってみたかったのです
498 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 02:13:32 ] それならジェネリクスじゃなくて手抜かずにインターフェース使ってヤレ。 ちなみに次のバージョンからクロージャーが入る。
499 名前:489 mailto:sage [2008/01/29(火) 09:04:22 ] >>490-492 そちらの方向で色々試してみます。 ありがとうございました。
500 名前:デフォルトの名無しさん [2008/01/29(火) 09:47:26 ] java言語の書き方(例:if やfor文の書き方)が全部書いてある 日本語のダウンロードできるドキュメントを教えてください
501 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 10:47:50 ] java 言語仕様 でググレカス
502 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 11:04:04 ] 任意のTaskを前回のTaskが終了した時点から一定時間経過後に実行してくれる、 SingleThreadなExecutorServiceって存在しますか?
503 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 11:47:20 ] >>502 Executors#newSingleThreadScheduledExecutor
504 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 12:56:54 ] JTreeとJTextAreaを2カラム形式で配置し、 JTreeで異なるノードを選択した時に、JTextAreaの内容を切り替える プログラムを作ろうとしているのですが、上手くいきません。 JTextAreaやJFrameを設定しているクラスと、JTreeを設定しているクラスを 別々に分けているせいか、mouseListenerが上手く動かなかったり、 変数のやり取りが上手くいかなかったりしています。 どういった手順で切り替えるよう組めばいいでしょうか。
505 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:03:25 ] 本にうっかりヨダレたらしてしまって 後日そのページがごわごわになってて萎えんfg9あぷ9j;:
506 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:17:28 ] Excelを出力するのにjakarta poiを使おうと思うんですが サーブレットから使っても大丈夫でしょうか? スレッドセーフというかなんというか、同時に複数動いても 大丈夫なものでしょうか?
507 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:26:26 ] >>503 それだとscheduleWithFixedDelayとかで、決まったTaskしか定期実行しかできませんが、 まとめてexecuteしたTaskを必ず一定間隔を空けて実行するような奴とかないでしょうか。 とりあえず自分で実装してしまったのですが、既存実装があったら悲しいなぁと思いまして。
508 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:55:49 ] >>504 まず問題点を分けてみないと。 >mouseListenerが巧く動かない 実装が悪いんだろう。 classを分けてるってソース(なんとか.java)を分けてるって意味だよね? >変数のやりとりが巧くいかない >クラスを別々に分けているせいか ひとつのソースで動くプログラムならソースを分けても動く道理。 classから違うソースのclassの呼び出し方が判らないとか変数が読めないとかなのか。 単純化したひとつのソースで試してみる。
509 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:24:09 ] 質問です。 「演算子+は引数の型double,Graphicsで未定義です。」 というエラーがでます。これを解決するにはどうすればよいでしょうか?
510 名前:デフォルトの名無しさん [2008/01/29(火) 14:30:54 ] Date currentTime = calendar.getTime(); ↑コンパイルエラーでした。シンボルを解釈処理できません。 何をimportしたらよいですか? sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/util/Date.html を見てimport java.util.Date.*;を書きましたがだめでした。 どうやって必要なimportを調べたらよいのですか?
511 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:32:56 ] >509 double a = ???; Graphics b = ???; a + b; こんなことは出来ないってことを言ってるんだよ。 とりあえず、プログラム見直せ。 >510 import java.util.Date; でOK
512 名前:509 mailto:sage [2008/01/29(火) 14:39:11 ] >>511 ありがとうございます。見直してみます
513 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:47:09 ] >>511 コンパイルしたいです。 import java.util.Date; import java.text.SimpleDateFormat; import java.util.Locale; public class a { public static void main (String args[]) { Date d = calendar.getTime(); SimpleDateFormat f = new SimpleDateFormat("EEE", Locale.JAPANESE); String s = f.format(d); System.out.println(s); } }
514 名前:デフォルトの名無しさん [2008/01/29(火) 14:53:52 ] >513 calendarってのが定義されてないからコンパイル出来ない。
515 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:47:28 ] CSVを解析するプログラムを作っていて「java CSV」で検索したのですがあまりよいものがなく 「CSV 正規表現」で検索したらPerlのサイトが出てきて自分なりに作ってみたんですけど疑問がいくつかあるので質問させてください。 ========================================== import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.FileInputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.regex.Pattern; import java.util.regex.Matcher; public class CsvSplit { private static final String CSV_SPLIT_REGEX = "(\"(?:[^\"]|\"\")*\"|[^,]*)"; private Pattern _pattern; /** * 実行用のメイン */ public static void main(String[] args) { CsvSplit aaa = new CsvSplit(); ArrayList csvArray = aaa.readCsvFile("C:\\zzzzzzzzzz.csv", "JISAutoDetect"); Iterator ite = csvArray.iterator(); while(ite.hasNext()) { String[] csvData = (String[])ite.next(); for (int i = 0; i < csvData.length; i++) { System.out.println("-------------"); System.out.println(csvData[i]); System.out.println("-------------"); } } }
516 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:49:47 ] /** * コンストラクタ */ public CsvSplit() { this._pattern = Pattern.compile(CSV_SPLIT_REGEX); } private ArrayList readCsvFile(String fileName, String charsetName) { try { // ファイルの取得 BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream(fileName), charsetName)); ArrayList csvArray = new ArrayList(); String columnValue = ""; try { // ファイルから1行ずつ読み込む while (br.ready()) { String lineData = br.readLine(); // ダブルコーテーション以外の文字をすべて削除しダブルコーテーションの数を数える。 // ダブルコーテーションの数が奇数の場合は次の行も読み、再び奇数になるまで読み込む if (lineData.replaceAll("[^\"]", "").length() % 2 == 0 && columnValue.equals("") || lineData.replaceAll("[^\"]", "").length() % 2 == 1 && !columnValue.equals("")) { columnValue += lineData; String[] splitData = splitCsvData(columnValue); columnValue = ""; csvArray.add(splitData);
517 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:51:05 ] } else { columnValue += lineData + "\r\n"; } } return csvArray; } finally { br.close(); } } catch (Exception ex) { ex.printStackTrace(); return null; } } /** * CSVデータの1行を分割して配列にして返却する。 * 改行が含まれるデータの場合は必ず奇数となるので、奇数である限り取得処理を繰り返す。 * ただし、CSVデータは以下の条件で保存されている場合に限る。 * 1.基本的にコンマで区切った部分がスペースを含めて値である。 * 2.値にコンマ、ダブルクウォート、改行が含まれる場合は、値全体をダブルクウォートで囲む * (コンマやダブルクウォートがない場合に値全体がダブルクウォートで囲まれていても問題ない) * 3.値に含まれるダブルクウォートは "" となる。 * @param csvLine * @return */ private String[] splitCsvData(String csvLine) { ArrayList csvDataArray = new ArrayList(30); Matcher matcher = this._pattern.matcher(csvLine); boolean isDataSkip = false; String columnValue = "";
518 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:51:11 ] このまま俺らにデバッグしろと言う気か
519 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:51:37 ] // 正規表現に従い取得する。 while(matcher.find()) { // なぜか値が取得できた場合の次の値が空文字として取得できるのでスキップする if( isDataSkip ) { isDataSkip = false; continue; } String result = matcher.group(); // 値が取得できたかどうか if( !result.equals("") ) { isDataSkip = true; } // データの前後がダブルクウォートで囲まれている場合は省く if(result.startsWith("\"") && result.endsWith("\"") ) { result = result.substring(1, result.length() - 1); // データにダブルクウォートがあれば1つに置換する result = result.replaceAll("\"\"", "\""); } // セット csvDataArray.add(result); } String[] splitData = new String[csvDataArray.size()]; csvDataArray.toArray(splitData); return splitData; } } ==========================================
520 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:01:23 ] >>518 長くてすいません。。。 質問なんですけど、 1.readLineで1行ずつ取得していると改行データを含む行が分割されてしまうので本当はCRLFが 正しいデータかわからずreadLine以外に効率よく確実に読み取る方法ってありますでしょうか? 2.perlのサイトだと正規表現でダブルコーテーションの数を直接数えてるんですけどjavaの正規表現だと どうやるのでしょうか? 3.正規表現で値を取得した場合次の値が空文字として取得できてしまうのですが 正規表現がいまいちよくわからず・・・。パターンの悪いところや正しいパターンを教えていただけないでしょうか。 4.@ITでC#で「^(?:(?<1>"[^"]*"),?|(?<1>[^,]+),?|,)*」というの見つけたのですが動かず。。。C#とjavaってそこまで違うのですか? 長文駄文ですいません。お手数おかけしますが宜しくお願い致します。
521 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:10:20 ] よくググレCSVライブラリあるぞ。 ところでThe Java Virtual Machine Specificationの和訳って本しかないかな? 本買おうか悩んでるんだけど。
522 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:15:29 ] ネットにあってもどうせ広告すらクリックしないだろ乞食