- - PR -
[jdk1.3.1]全角文字を指定バイトで区切る方法
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-03-17 12:11
たびたびお世話になっております。
また、ご教授お願い致します。 今回、全角文字の入ったString型のデータをたとえば、1byte目から6byte目まで 取得したいときって、「String.getbytes」で一度byte型変換しないと 無理なのでしょうか?? ほかによい方法があればご教授お願い致します。
多少省いてますが、今まではこのような方法で行っていました。 ほかにスマートな方法があればご教授お願いします。 (補足。。文字列内は全角・半角混在の状態なので、substringは使用していません) [ メッセージ編集済み 編集者: ひろ 編集日時 2004-03-17 12:14 ] | ||||||||
|
投稿日時: 2004-03-17 12:27
for文で回さず、arraycopyを使えば、少しはスマートになるのではないでしょうか。 | ||||||||
|
投稿日時: 2004-03-17 13:11
わざわざコピーしなくても、
String otString = new String(inbyte, 0, 6); で良いのでは? | ||||||||
|
投稿日時: 2004-03-17 14:08
JavaのStringは16bit Unicode(UCS-2)ですので、いわゆる半角文字も、1文字当たり
2byteです。サロゲート領域などを使用するような特殊な場合を除けば、正しく生成さ れたStringオブジェクトから6byteを切り出すのとString#substring()で3文字切り 出すのは同じことのはずです。 もし、半角文字は1byteと扱って合計6byteを切り出したいということでしたら、その 場合は、一文字ずつ半角文字領域かどうかのチェックを個別に行う必要があると思い ます。 | ||||||||
|
投稿日時: 2004-03-17 14:27
みなさん早速の回答ありがとうございます。
coasmさんの方法で行おうと思います。 とても勉強になりました。 (できれば、、一行でやりたいというのが本音ですが、、) >>シュンさんの書き込み >>もし、半角文字は1byteと扱って合計6byteを切り出したいということでしたら、その >>場合は、一文字ずつ半角文字領域かどうかのチェックを個別に行う必要があると思い >>ます はい。半角文字も1byteとして扱い、合計6byteを切り出したいという要求ですので、、 (説明不足でしたね。申し訳ありません) 補足::全角、半角文字混在のstringに対して、byteで区切ることは 仕様的に余りよろしくないのも承知ですが、現在仕方なくこの方法で行っています。 みなさんありがとうございました。 | ||||||||
|
投稿日時: 2004-03-17 14:31
String#getBytesはプラットフォームのデフォルト文字セットを使用するので 半角文字は1バイトになりませんか? | ||||||||
|
投稿日時: 2004-03-17 14:53
半角が1Byteならcoasmさんの方法では全角文字が途中できれてしまう恐れがあります
なのでシュンさんの書き込み通り > 一文字ずつ半角文字領域かどうかのチェックを個別に行う必要があると思います で実装するべきだと思います。 | ||||||||
|
投稿日時: 2004-03-17 15:12
ゆうじゅんさん書き込みありがとうございます。
半角が1Byteならcoasmさんの方法では全角文字が途中できれてしまう恐れがあります コード: -------------------------------------------------------------------------------- 例)「123456」を6Byte目で区切ると「4」の半分で区切られる -------------------------------------------------------------------------------- はい。coasmさんの方法では、途中で切れるのも承知です。 ですので、 >>補足::全角、半角文字混在のstringに対して、byteで区切ることは >>仕様的に余りよろしくないのも承知ですが、現在仕方なくこの方法で行っています。 と記述しました。 中途半端に切れた文字は、変に表現されますがそれはそれでOKだという判断のもとに 今回は作成しています。 説明足らずで申し訳ありません。 | ||||||||
