[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 08/25 07:07 / Filesize : 116 KB / Number-of Response : 420
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者】Java質問・相談スレッド104【大歓迎】



1 名前:デフォルトの名無しさん [2007/07/27(金) 08:46:32 ]
プログラミング言語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質問・相談スレッド103【大歓迎】
pc11.2ch.net/test/read.cgi/tech/1182896607/

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。

次スレは>>980あたりで。

175 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 13:17:36 ]
低レイヤーの話をするのは無意味。Cじゃないし。

176 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 13:23:32 ]
>>171
javaの配列が短形でなくて良いのはどうせ最適化されて実行時に都合の良いように再配置され凸凹になるから。

メモリアドレスで言えば番地が連続している訳ではないし、その必要も無い。

配列要素nがあったとして番地的にn+1の要素が隣の番地にあるとは限らない。

だからjavaの配列は順次アクセスが早いとは限らない。


177 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 13:27:36 ]
まあこのくらいの問題なら自分でアラインするより
よっぽどスマートなメモリの使い方する(文字列以外)から気にしたら負け。


178 名前:デフォルトの名無しさん [2007/08/04(土) 14:58:42 ]
javaで構造体(みたいなもの)を定義してその中のある要素でソートするにはどうしたらいいですか?
たとえば
名前、身長、体重のデータからなる構造体を身長の高い順から表示するようなプログラムを作りたいんですが。

179 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 15:30:54 ]
compareTo

180 名前:デフォルトの名無しさん [2007/08/04(土) 15:31:04 ]
OSのシステム言語を英語にするとコンソールの日本語が文字化けしてしまうのですが
システム言語に関係なく日本語を文字化けさせないためには、どのようにすればよいのでしょうか?

ロケールなどを設定してもダメでした…

181 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 15:32:07 ]
仕様です

182 名前:170 mailto:sage [2007/08/04(土) 15:45:23 ]
お答えありがとうございます。
現時点では(1)を否定する理由が思いつかないため、(1)でいこうと思います。

その後いろいろ調べてみました。
(2)を採用する理由は、実装クラスの内部的な変更に強くなる(インタフェースのメソッドのみを使用している限り、利用する側の修正がない)。
(3)を採用する理由は、実装クラスそのものが別のクラスに変更されることに強くなる(データストアがWeb、Fileなどに変わっても使える)。

このように理解したのですが、これで問題ないでしょうか。

183 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 17:36:18 ]
> (2)を採用する理由は、実装クラスの内部的な変更に強くなる(インタフェースのメソッドのみを使用している限り、利用する側の修正がない)。
> (3)を採用する理由は、実装クラスそのものが別のクラスに変更されることに強くなる(データストアがWeb、Fileなどに変わっても使える)。

(2) と (3) はほとんど同じことだと思うが。

(2) は DBAHelperImpl のメソッドで取得するとはいえ、
実際に何のクラスが返されてるか外からはわからないわけで。
別のクラスにすりかえることはカンタン。



184 名前:デフォルトの名無しさん [2007/08/04(土) 18:04:03 ]
どなたかListについて教えていただきたいのですが

例えばArrayListでインスタンスを生成したListの変数があり
そのリストには1000個の要素(文字列)が入ってるとします。
もっと具体的に書くと文字列"AAA"と"BBB"と"CCC"が
それぞれ100個、400個、500個リストに格納されてるとして
(格納されてる文字列の並びは適当)
このときリストに格納されている各文字列の存在個数を高速に割り出す方法はありますでしょうか?

パフォーマンスを無視すれば配列のサイズ分だけ回せば可能ですが
それだと配列のサイズの二乗になってしまうので可変長データでやるにはかなり非現実的ですので

185 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 18:14:53 ]
>>184
ソートしてからなら1次でしょ。
StringはComparable<String>を実装してますよん。

186 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 18:17:15 ]
コピーしてマージソートしてから1週舐めるなら
文字列の種類が少ない場合に遅くなるかもしれんけどね。

187 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 18:22:50 ]
ハッシュマップで数えるとか。
for (String s : list) {
if (hashmap.containsKey(s)) {
hashmap.put(s, map.get(s) + 1);
} else {
hashmap.put(s, 1);
}
}

188 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 18:26:02 ]
TreeSetじゃだめなん?

189 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 18:27:08 ]
あーSetはだめだった。

190 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 18:40:40 ]
>>187の方法でやったことあるけど十分早かったような

191 名前:デフォルトの名無しさん [2007/08/04(土) 18:41:43 ]
いま軽くコレクションクラスでソートしてみたら恐ろしく簡単にソートできたので
>>185様の案で行くことにしました。ありがとうございました。

192 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 18:52:16 ]
ソートする必要なければ TreeMap/TreeSet よりか HashMap/HashSet のが速いよ
Tree の利点はキーが常にソート順を維持されてるところ
Hash は順序不定

193 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 18:58:05 ]
それじゃ187様の方法で行きます。ありがとうございました



194 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 19:12:46 ]
ところでListの配列をHashMapに変換または簡単に作成する方法ある?

195 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 19:32:16 ]
キーはいかがなさいますの?

196 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 19:44:35 ]
やっぱソートして比較することにした

197 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 19:50:02 ]
Stringのマイクロベンチマークは、String.equalsが落とし穴になるよな。
例えば定数をコンソールやテキストから入力するなら、s1 == s2 で true になることは無い。
静的にデータを持つならnew String(CONST_STR)みたいにしとくことが必要になる。

こういう正しいテストデータ作成用のライブラリってない?

198 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 19:53:25 ]
>>197
何がやりたいか分からん

199 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 19:54:20 ]
マイクロベンチマークがしたい。

200 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:01:55 ]
>>180
コンソール側のページコードでどうにかならない?

201 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:02:07 ]
>new String(CONST_STR)みたいにしとくことが必要

ここがわからない。

>正しいテストデータ

ここもわからない。

202 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:04:55 ]
>>201
> ここがわからない。
>> 例えば定数をコンソールやテキストから入力するなら、s1 == s2 で true になることは無い。

言語仕様がわからないなら介入しなくていいから。

203 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:05:37 ]
equalsつかえよ



204 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:08:27 ]
迷惑だからキミは絡まないで。

205 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:08:54 ]
とりあえず>>197はアホ

206 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:10:20 ]
String.equalsの仕様を知らない馬鹿がなんか邪魔してくる・・・

207 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:43:25 ]
オブジェクトが一致する場合と一致しない場合で、equals が true になる場合の計算コストが違うことをいってるわけ?
トーシロの俺には何がなんだか(´・ω・`)

208 名前:197 mailto:sage [2007/08/04(土) 20:46:30 ]
事故解決しますた

209 名前:208 mailto:sage [2007/08/04(土) 20:48:48 ]
誤爆です><

210 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:57:44 ]
     /ニYニヽ
    /( ゚ )( ゚ )ヽ
   /::::⌒`´⌒::::\   でっていうwwwwwwww
  | ,-)___(-、|
  | l   |-┬-|  l |
   \   `ー'´   /


211 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 21:55:52 ]
存在個数なら、ListなめてMapにカウント突っ込んでいけばいいんじゃないの?

212 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 22:36:53 ]
パフォーマンスの問題は、実際にパフォーマンス上の問題が起きてボトルネックが発見できた場合に対処すればいい。
机上の空論でのパフォーマンス対処ほど無駄なものはない

213 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 22:40:59 ]
 /i /{/'⌒'}  }}Y/ / ,r-、ヽ,  /
 ノ、|、ヾ_,,ノ  ノ ノ{ ヾ {^')) }フ/ /          _/
   \ヽ、    彡'`、、  'ー' ノ //",,゙ """ /    ヽ 理  議  そ
 ヽ-、ミ‐-、、 、,r=‐'¬ー=、、,-‐'_ ヽ、    /ノ     /  解  論  の
 ミ/   ~          ̄ノ /\   /彡 ""  |/   で   し  な
  /   ,'    u ∪   ! ヽ  | i、゙ー''"彡     /|   き  て  め
  、、∪ / ノ /  _,,,...-‐‐ニ=,ノ,,/ ヽ、,,_ \   ,イ / |   な  い  方
  ニ、=!, l_. レr=-ニ二、,,,.-'"    ー、==-ヽ'"/ / ヽ   い  る  を
  、(・,)>ノ⌒  ∠,(・,)_く  ゙`   ヽ゚ノ`ー=、_ /// ∠  の  こ
    ̄/""゙   ヽ ̄ ̄  \ヽ      ̄ ̄ //   ノ  か  と
  u 〈  、     u   (ヽ          //     ̄ノ ?  も
    ヽ -'   lj     >、       //  /    ̄ヽ、
    /ヽー‐ 、      /'"´ 'i     //  /       ∨ヽ/
    ^゙"⌒ヾ、     ,i|  ,"__}    //  /  /
    ー-  -      ヽ_人`'′ //  /  /
               / i'゙' /-─‐‐''/_/_
   、         _/-‐ヽ、___,,,, -‐‐  ̄
   ー-、、,,__,-‐'//ノゝノ ノ  ヽ\



214 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 22:45:30 ]
>問題が起きてボトルネックが発見できた場合に対処すればいい

どこの腐れ初心者ですか?
あ、ここは初心者スレか。悪かった

>机上の空論でのパフォーマンス対処ほど無駄なものはない
何千件とデータ回す場合を考えたら目に見えて明らかなんだが頭大丈夫かお前?

215 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:00:33 ]
それは凄い動体視力

216 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:20:25 ]
>>214
マジレスしとけば、数千件程度でパフォーマンスに影響出るって何時の世代のマシンだよw
数千回DBアクセスでもすんの?
数千回IOでもすんの?

217 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:24:49 ]
じゃあ数百万件に変更な。これでいいか?

218 名前:デフォルトの名無しさん [2007/08/04(土) 23:27:47 ]
>>217
素直にDB使え

219 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:36:24 ]
>>217
そりゃアルゴリズムか設計に問題あるだろ

220 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:42:42 ]
>184だが、Listに文字列を突っ込む時にMapにカウントしておく
適当に書いたのでコンパイルは通らないと思うがこんな感じだ
class StringList {
  List<String> list;
  Map<String, Integer> counter;
  public int add(String str) {
      Integer count = counter.get(str);
      if(count == null) {
          count = new Integer(0);
          counter.put(str, count);
      }
      count++;
      list.add(str);
      return count;
  }
}
最初から数えておけばいいってこと

221 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 23:57:17 ]
最初からカウントしてたら誰も質問しねぇわなww
オナニーコードもほどほどにな

222 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:09:22 ]
プッ

223 名前:デフォルトの名無しさん [2007/08/05(日) 00:34:48 ]
longやintといったプリミティブ型の数値をbyte配列に変換するにはどうしたらいいでしょうか?
longの値をbyte[8]の配列に入れたいのです。

何か方法がありましたらぜひお教えください。



224 名前:デフォルトの名無しさん [2007/08/05(日) 00:38:27 ]

くそ天皇 くそ天皇 くそ天皇 くそ天皇

いい加減死ねっつってんだろ屑ニートくそ天皇が

相変わらず病的な粘着っぷりだな屑ニートくそ天皇が

毎日毎日毎日粘着出来て良いでちゅねくそ天皇

くそ天皇さっさと死にやがれゴミが

東京に在住している精神病珍米糞ニートくそ天皇君の末路

さっさと精神病院逝くか首吊って逝くか選べや糞天皇が

早く死ねよ糞ニート天皇が

粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました
さっさと死ねやくそ天皇が

早く死ねっつってんだろ屑ニートくそ天皇が

お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや

とっと死に晒せや糞ニート天皇が

225 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:40:17 ]
どういうふうに変換したいのよ。

どういうふうでもいいなら、これでどう↓
long x = 0;
byte[] b = new byte[8];
new DataOutputStream(new ByteArrayOutputStream(b)).writeLong(x);

226 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:42:33 ]
>>223
long l = 1000;
byte b = (byte) l;
という形でダウンキャストを行う
そうすれば、上位ビットを無視するので、最下位のバイトが格納される。

上位バイトの取得は、ビットシフトを使えばOK

227 名前:デフォルトの名無しさん [2007/08/05(日) 00:42:42 ]

くそ天皇 くそ天皇 くそ天皇 くそ天皇

いい加減死ねっつってんだろ屑ニートくそ天皇が

相変わらず病的な粘着っぷりだな屑ニートくそ天皇が

毎日毎日毎日粘着出来て良いでちゅねくそ天皇

くそ天皇さっさと死にやがれゴミが

東京に在住している精神病珍米糞ニートくそ天皇君の末路

さっさと精神病院逝くか首吊って逝くか選べや糞天皇が

早く死ねよ糞ニート天皇が

粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました
さっさと死ねやくそ天皇が

早く死ねっつってんだろ屑ニートくそ天皇が

お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや

とっと死に晒せや糞ニート天皇が

228 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:42:51 ]
byte[] binary = new byte[8];
ByteBuffer buff = ByteBuffer.wrap(binary);
buff.put(longValue)

もっといい方法が在るかもしれん。
あとJava内部のバイト配列はビッグエンディアンのはずだから気をつけること。

229 名前:デフォルトの名無しさん [2007/08/05(日) 01:01:41 ]

くそ天皇 くそ天皇 くそ天皇 くそ天皇

いい加減死ねっつってんだろ屑ニートくそ天皇が

相変わらず病的な粘着っぷりだな屑ニートくそ天皇が

毎日毎日毎日粘着出来て良いでちゅねくそ天皇

くそ天皇さっさと死にやがれゴミが

東京に在住している精神病珍米糞ニートくそ天皇君の末路

さっさと精神病院逝くか首吊って逝くか選べや糞天皇が

早く死ねよ糞ニート天皇が

粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました
さっさと死ねやくそ天皇が

早く死ねっつってんだろ屑ニートくそ天皇が

お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや

とっと死に晒せや糞ニート天皇が

230 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:07:06 ]
初心者じゃないんだけど、axisとかlog4jとか使ってるフリーのJavaライブラリを
複数使ってるとjarの中にあるクラスがバージョン違いで実行エラーになるんだけど
どうしたらいいんだろう。

実行中にロードされたクラスファイル全部を見直して、モジュールの競合を解決してくれたり
何がいけないのかを判断してくれるツールないかなー?


231 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:12:54 ]
>>230
・競合ライブラリを最新のものに統一する。動かない部分は自前で修正
・それかクラスローダを分ける

232 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:14:47 ]
>>231
クラスローダを分けるとClassクラスとかでインスタンス生成するとき面倒じゃない?
競合ライブラリを最新のものにして、古いメソッドや仕様変更したAPI使ってたら、アウトだし。


233 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:18:44 ]
初心者じゃないって前振りはいったいなんだったのだろうか。



234 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:21:31 ]
class A<T> {
List<T> list = new ArrayList<T>;
public List<T> getList() {
return list;
}
}

みたいにクラスにリストを持たせたとき、

A<Hoge> a = new A<Hoge>();

に対して

a.getList.add(hoge1);

とか

a.getList.remove(hoge2);

って出来ないの?やってみたところできてないっぽいんだけど

235 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:26:58 ]
できるでしょ。

>a.getList.add(hoge1);

a.getList().add(hoge1);

236 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:29:07 ]
uho-勘違いしていました
お恥ずかしい(-_-)

>>235
回答ありがとうございました

237 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:33:58 ]
複数のスレッドから操作されるフィールドcountに
volatlieを付けるとする。どの程度保障されるもの?

while (count < 0) {

}
public void setCount() {
    this.count = count;
}


238 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:35:06 ]
仮引数書き忘れた。。。

239 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:44:20 ]
そんな意味不明なコード片じゃ何が言いたいのかわからん。

count++; みたいなコードは、volatile であってもアトミックにならない。他のスレッドが割り込む可能性がある。
つまり count++; をするスレッドが複数あったらだめ。
書き込むスレッドがひとつだけの場合は複数のスレッドから読んでも大丈夫。

・・・ていう話? それとも volatile の正確な定義が知りたいのん?

240 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:45:56 ]
Java の volatile はいい加減な実装になってる可能性がある、
って話を見たことがあるんだけど、今でもそうなの?

241 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:55:30 ]
可能性の話をされてもなぁ。
1.4 以前と 5.0 以降で volatile の仕様が変わったという話はある。
少なくとも 5.0 以降は仕様どおり実装されてんじゃない? Sun の VM では。
でなきゃ、java.util.concurrent.* あたりが今ごろ異常動作しまくりのはず。

詳しい話はこのへんでもどうぞ↓
www-06.ibm.com/jp/developerworks/java/040416/j_j-jtp02244.html
www-06.ibm.com/jp/developerworks/java/040514/j_j-jtp03304.html
www-06.ibm.com/jp/developerworks/java/library/j-jtp06197.shtml

242 名前:223 mailto:sage [2007/08/05(日) 03:25:44 ]
>>225,226,228
回答ありがとうございます。
勉強になりました。

昔ならったコボルでは
long l=0x0123456789abcdefL;
byte[] b=new byte[8];
b=l;
で、lをbに代入すると
[01][23][45][67][89][ab][cd][ef]
こんな感じにカパッと当てはまったなー、javaではどうやればいいんだろうと思ったしだいです。
ビッグエンディアンには注意します。

243 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 04:02:50 ]
Java内部がビッグエンディアンというか、
Data*StreamやデフォルトのByteBufferがそう補正してるってのが正しい?



244 名前:デフォルトの名無しさん [2007/08/05(日) 04:09:43 ]
正しくない。
というか意味がわからん



245 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 04:40:07 ]
意味が分からないなら書くな。てかJavaDocに載ってる。

246 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 05:17:10 ]
最近byteとintの単項数値昇格ネタ増えたな。
俺自身バイト指向でデータ扱うことが減ったのですっかり忘れてた。
"& 0xFF"で下位bitのみとれって話だよね。


247 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 09:05:18 ]
Jakarta CommomsのHttpClientについてのいいページない?
ググったけど、情報量が足りないページばかり。

248 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 09:22:41 ]
>>247
情報量って。。。本家にいくらでもあるだろ

249 名前:デフォルトの名無しさん [2007/08/05(日) 09:27:21 ]
ファイルの入出力をしているのですが、

もしプログラムと同じディレクトリに入出力用ファイルあれば、
そのファイルから中身を取り出し・加工して再びそのファイルに書き出す。
もし無ければ、新しいファイルを作成して、そこに書き出す。

という用に行いたいのですがどの様にしたら良いでしょうか?
教えてください。

250 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 09:50:44 ]
>>249
どのJAVAの入門書でもサンプルコードが載ってるだろ
ググれば山ほどあるだろ

251 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:27:43 ]
>>242
時代の流れだな
Javaでバイトを意識してデータを扱うケースは稀だし、知らない技術者も多い

252 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:02:22 ]
String型変数に入っている(2バイト)文字の文字列を
漢字、ひらがな、カタカナ、その他記号などといった種類別に分割するということを

「プログラミング言語Javaに関する質問スレです。」
         ↓
「プログラミング」「言語」「Java」「に」「関」「する」「質問」「スレ」「です」「。」

Javaで(効率よく)やるにはどのようにしたらよいでしょうか?
(というか、文字種別をどうやって判断したらよいでしょうか?)
文字コードによる問題などもありますか?


253 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:07:50 ]
ひらがなとカタカナは順序どおり並んでるらしいからif thenでやるのが簡単っぽいけど



254 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:10:03 ]
漢字・ひらがななら3バイトだと思うのは置いといて、
自然言語解析するか単純にテキストそう舐めして用意しといた単語リストと照らすか。
日本語はRPNなのでry

言い出したら切りがないな。


255 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:12:39 ]
UFT-16なんだから、全部2バイトだろ

256 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:14:09 ]
volatlieの件だけど、1.5ならいけそうです。
ありがとう、検証してみます。
1〜400のスレッドから操作を受けてるみたい

257 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:36:33 ]
>>256
1.5ならば、AtomicIntegerの使用を検討してみたら?
アトミックな操作が簡単に出来る

ただ、そもそもスレッド周りの勉強をした上でスレッドに手を出した方がいい

258 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:39:45 ]
>>252
効率よくやる方法はかなり難しいのではないか?
英語のように単語間がスペースで区切られているなら楽だろうが・・・

ぱっと思いつくのは、カタカナ・ひらがな・半角英数(といくつかの記号)は正規表現かなにかで定義
漢字で抽出するのは難しすぎるので「その他」で我慢する
後は、頭から崩して連結していくしかないと思う

下手に文字コードを数値で表現した所で、バグは増えても実行性能は大してかわらなそ

259 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:40:16 ]
スレッドに手を出さなきゃスレッドの勉強なんぞできないだろ
このスレの自称中級者どもはうざいのばっかだな・・・

260 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:51:02 ]
お前は新しい技術をコピペでもして使ってから勉強するのか?
動けばいいという低レベルなマの典型だな

261 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:56:40 ]
お前のコードはバグだらけなんだろうな。
普通は模範的なコードを見て覚えるもんだ。

262 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:58:18 ]
模範的なコードを意味も含めて理解することが勉強ではないのか?w

263 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:59:59 ]
>>262
お前自身が何も理解してなさそうだな。この流れをみるに。



264 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:02:00 ]
>260の頭が悪いということは解った

265 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:02:53 ]
初学者がvolatileって単語にたどり着いてる時点でGoサインはでてるだろ
いじって覚える絶好のころあいだと思うのだが違うのか?

266 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:27:56 ]
別の人がさわらないプログラムだからと言って、クラス変数を全てpublicにしたら怒られそうですが。

public class Hogegege
{
  private String name__;

  public String getName()
  {
    return new String(name__);
  }
}

っていうように、クラス変数を要求されたときに
新たに生成したものを返して絶対に変更できないようにした方がいいんでしょうか?
それとも単に return name__; でOK?

267 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:32:10 ]
String は元から絶対に変更できないから単に return でOK。
変更できるようなオブジェクト (普通の配列とか) は clone した方がいいこともある。

268 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:40:46 ]
StringやIntegerなどは不変クラスと呼ばれる値オブジェクトとして理想的な構造を持ってる。

例えばOSごとの改行コードを返すクラスがあるとして、
それがchar[]で返されるものなら、それは return clCode.clone(); とかすべき。
コレクションならCollections.unmodifiable系メソッドでラップするのもよし。

269 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:50:07 ]
定数にコレクションを使うときに下のようにすることもある。

public static final Set<String> SUPPORTED_LANGUAGE;
static {
    Set<String> set = new LinkedHashSet<String>();
    set.add("ja");
    set.add("en");
    SUPPORTED_LANGUAGE = Collections.unmodifiableSet(set).;
}

270 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:52:08 ]
要求された側が何をしたいかにもよる
要求された側も何をさせてOKかを考える
その上で生で公開させてもいいし、防御的にコピーを返してもいい
結局は要求次第だが、なるべくは防御的にするのがセオリー

Stringに関しては>267,268の説明の通り
たが、char[]をコピーするか否かは要件次第なので、一概にコピーするべきとは言えない

271 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 15:41:35 ]
変なのが騒いでるが
だれか満を持してネタ投下した>>255に突っ込んでやれよw

UTF系は固定長じゃないぞ。

272 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 16:15:11 ]
UTF-32は固定長だが、UTFじゃなかったのか。

273 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 17:10:30 ]
UTF-32は21bitになったUnicode3.1の全コードを単一のbit長で表現するために
後から作られたから可変長にする必要がないだけだよ。
アレが特殊。21bit範囲内はUCS-4と互換性を取るって目的もあるし。

可変長より固定長の方が扱いやすいからbitの無駄使いより扱いやすさを優先した符号化方式。

UTFは元来可変長で表すもの。



274 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 17:13:49 ]
サロゲートがそもそも後付けだろ

275 名前:132 mailto:sage [2007/08/05(日) 17:31:38 ]
連結って意味だったんですね^^;
謎が解けましたorz

ありがとうございました。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<116KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef