- - PR -
JAVAで、指定したバイト数でStringの文字を抜き出したい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-05-11 13:20
JAVAで、指定したバイト数でStringの文字を抜き出したいのですが、
方法がわかりません。 文字列は、全角及び半角が混ざっています。 | ||||
|
投稿日時: 2005-05-11 13:55
こんにちは。
substrではお望みの結果を得られないでしょうか。 私はsubstringしか使用した事がないのですが、指定位置から指定バイトを取得できるとありました。 参考になりましたら幸いです。 _________________ たまき@天 凶暴な兎ほど可愛い!? | ||||
|
投稿日時: 2005-05-11 14:03
半角文字を1バイト扱いとしたい、という事でしょうか。
(JavaのStringは、Unicode。全ての文字は2バイト) 右上の検索で、「バイト数」あたりをキーワードに検索すれば情報が得られるかと思います。 例えばこの辺り。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10143&forum=12 | ||||
|
投稿日時: 2005-05-11 14:08
すみません。
説明不足でした。 String t_String ="123あいうABCDEF"; という文字がありまして、6バイト分を抜き出すとしたら、どのようにしたらいいのでしょうか。 ちなみに t_String.substring(0,5); をおこなったところ、「123あい」が、かえってきました。 | ||||
|
投稿日時: 2005-05-11 14:19
こんにちは
どのエンコーディングのバイト数かにもよりますが・・・。 例えばShift-JIS(MS932)なら
でバイト長が取得できます。 後はString#substring(int, int)で部分文字列にしながら、 必要なバイト数になるまでチェックを繰り返します。 # [追記] ゴメン。例外が発生する事忘れてました [ メッセージ編集済み 編集者: BBC 編集日時 2005-05-11 14:34 ] | ||||
|
投稿日時: 2005-05-11 14:33
シングルバイト文字=ASCII文字ということでしたら、Unicode
でもASCII文字は0xff以下ですので、こんなのでいいのでは。 (テストしていないので境界条件が怪しいです)
半角カナ文字を1バイト扱いしたいなら、Unicodeの半角文字 エリアも1byteで計算すればよいかと。 JVM上でのStringの文字コードはUnicodeですので、これでエ ンコード非依存になります。 | ||||
|
投稿日時: 2005-05-11 14:53
お世話になりました。
みなさんのおかげで、解決しました。 | ||||
|
投稿日時: 2005-05-12 09:55
ASCIIは0x7Fまでですね。 0x80-0xFFはラテン1補助文字で、おそらく半角として 扱いたくないと思われる「±×÷¢£§¬¶°」なども 含まれます。 [追記]間違い。0xA0-0xFFがラテン1補助文字。 0x80-0x9Fは制御コード。 でした。 [ メッセージ編集済み 編集者: JW 編集日時 2005-05-12 09:59 ] [ メッセージ編集済み 編集者: JW 編集日時 2005-05-12 11:02 ] |