- PR -

正規表現 バイトで扱いたい

投稿者投稿内容
nori1122
常連さん
会議室デビュー日: 2003/09/14
投稿数: 30
投稿日時: 2004-08-17 03:41
下記のような正規表現を使って、
ファイルからBufferedReaderのreadLine()メソッドを使って
読み込んだ内容を解析しています。
ファイルの内容は、全角文字と半角文字が混在するもので、
解析はバイトデータとしておこないたいのですが、うまくいかず悩んでいます。
(バイトデータとしてString型にいれるなどすれば、いいのかと思うのですが・・)
どなたかご存知のかた、ご教授願います

Pattern pattern = Pattern.compile("^(.{8})(.{8})(.{30})(.{17})$");

よろしくお願いいたします。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-08-17 09:54
(バイトデータとしてString型にいれるなどすれば、いいのかと思うのですが・・)
そのように、バイトのストリームで読んで、バイトで切り出し後、それぞれ
バイト→String ではダメなのですか?
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-08-17 10:37
InputStreamReaderを使って、ISO-8859-1のエンコード指定で読み込んでください。
正規表現にマッチさせて、グループを取り出すときは
String string = new String(matcher.group(i + 1).getBytes("ISO-8859-1"),"MS932");
のように、逆変換をかけてください。(MS932はWindowsの場合)

# もっとも正規表現でなく、String#substringで十分だけど
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2004-08-17 10:46
引用:

Pattern pattern = Pattern.compile("^(.{8})(.{8})(.{30})(.{17})$");


もし、こういう固定長のフィールドを切り出してくるようなパターンだけなら、正規表現を使わないってのが最も簡単な解決策だと思いますよ。
nori1122
常連さん
会議室デビュー日: 2003/09/14
投稿数: 30
投稿日時: 2004-08-17 10:49
引用:

MMXさんの書き込み (2004-08-17 09:54) より:
(バイトデータとしてString型にいれるなどすれば、いいのかと思うのですが・・)
そのように、バイトのストリームで読んで、バイトで切り出し後、それぞれ
バイト→String ではダメなのですか?



ご回答ありがうございます。
1行毎読み込み処理したいので、読み込んだString型をバイトで切り出してString型にしたいんですが、
方法がわからず困っています。
大変申し訳ないのですが、コードで教えていただけますか?
よろしくお願いいたします。
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2004-08-17 11:00
String クラスの API はご覧になりましたか?
見ればどのメソッドを使うか書いてありますよ。

もし見もせずに「コードで教えろ」と書かれているのであれば回答される方にとって大変に失礼なことですので、改められるようお願いいたします。
nori1122
常連さん
会議室デビュー日: 2003/09/14
投稿数: 30
投稿日時: 2004-08-17 11:17
引用:

Wataさんの書き込み (2004-08-17 10:37) より:
InputStreamReaderを使って、ISO-8859-1のエンコード指定で読み込んでください。
正規表現にマッチさせて、グループを取り出すときは
String string = new String(matcher.group(i + 1).getBytes("ISO-8859-1"),"MS932");
のように、逆変換をかけてください。(MS932はWindowsの場合)

# もっとも正規表現でなく、String#substringで十分だけど




ありがとうございました。
解決できました。助かりました。

>>GIOさま 私は「コードで教えろ」という荒っぽい言い方はしていません。
きちんと調べてわからない場合は、「教えてください」以外の言い方を教えてください。(なんといってもそういう風にとらえられてしまうものなんですかね・・)


Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2004-08-17 16:03
解決おめでとうございます。

以下枝葉かもしれませんが。
言葉遣いを荒っぽく書いてしまったことにはお詫びいたします。

きちんと調べてもわからない場合ですが、調べた範囲や項目、手段を書かれるとよろしいかと思います。
例えば、「Google で『Java バイト 正規表現』で調べましたが Jakarta ORO がマルチバイト対応である等の結果で、目的のヒントとなる情報は得られませんでした」などですね。
そうすれば、より有用なキーワードや、それ以外の情報ソースを知っている方から有効な回答が得られるやもしれません。

他のサイトなどではまったく調べた様子のない方や、「調べた」とだけ主張していて何をどのように調べたのかがさっぱりわからず対応に困る方もいらっしゃいますが、その轍は踏まないようお願いいたします。

スキルアップ/キャリアアップ(JOB@IT)