- - PR -
java入力チェック
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-11 23:03
String repSrc = "0123456789−―";
String repDst="0123456789--"; とかやっといて、repSrcのindexOfが-1ならそのまま、0以上ならrepDst.charAt(その数)をくっつけていくほうが、分かりやすいかも。 で、自分の用意した"−"に引っかからなくて困っているのなら、 その時点でelseを取って文字コードを出力してみれば良いのでは? 最後に、文字列を再構築するならStringBuilder#append()をおすすめします。 まあ、10文字程度では大した違いはないですが。 | ||||||||
|
投稿日時: 2006-06-12 09:11
mioさんご意見ありがとうございます。
>とかやっといて、repSrcのindexOfが-1ならそのまま、0以上ならrepDst.charAt(その数)を>くっつけていくほうが、分かりやすいかも。 これなら最初にエンコードしてそれからindexofした方が良くないですか? でもエンコードして?になることもあるんですよね... ぼくの作りでは最初に必ず置換するので前記述した形で問題は無いと思ってます。 あとは一文字目と最後にindexofで調べて、あればフォーマットエラーという事で 甘いかもしれませんが、最低限の入力チェック(正規表現チェックをするべきですね) はできていると思います。 ただ記述は16進数が正しいようですね、他の方も見るなら一般的なほうに合わせた方が いいですね。 ところでStringBuilder?StringBufferじゃないですか? | ||||||||
|
投稿日時: 2006-06-12 09:31
>これなら最初にエンコードしてそれからindexofした方が良くないですか?
エンコードというのは、全角→半角変換のことなんでしょうか? エンコードとコンバートは違うものですが。 その全角→半角変換のところを、コードの直接指定でない書き方にできないかな、ということです。 >ところでStringBuilder?StringBufferじゃないですか? Javaのバージョンが1.4以下なら、StringBufferで正解です。 | ||||||||
|
投稿日時: 2006-06-12 09:54
えーと、単純に「マジックナンバーをそのまま使用したくない(可読性が悪いから)」ってだけですよね。 ならば、「定数宣言を行なう」のが一般的な方法だと思いますけど。
ってな感じで。 ※判断には「等号」が必要なはずです。(<,>→NG <=, >= →OK) | ||||||||
|
投稿日時: 2006-06-12 10:30
みなさん、ありがとうございます。
>エンコードというのは、全角→半角変換のことなんでしょうか? >エンコードとコンバートは違うものですが。 >その全角→半角変換のところを、コードの直接指定でない書き方にできないかな、ということです。 いえいえ、文字置換とは違うエンコードです。 といっても普段は気にしたことも無かったので、できるかどうか疑問ですが、 どんな文字列でも、indexofの前に統一するという事で、Shift_JISならShift_JISで 明示的にエンコードを必ずかけると言う意味でした。 そうでなくとも?に置き換わったので正しい方法とは言えませんが.. やっぱりchar型で取り出し、半角ハイフンのそれぞれの文字型の整数で比較するのが 安全だと思いました。 ありがとうございます。 | ||||||||
|
投稿日時: 2006-06-12 11:58
エンコード云々の話ですか?
単純に 半角ハイフン(-)と半角長音(ー)の2つの文字コードがあるだけではないですか? 間違っていたらごめんなさい。 | ||||||||
|
投稿日時: 2006-06-12 12:50
エンコード云々のお話はおいといて... 「文字型の整数」では無く「文字コード」で考えた方が良くないですか? 例えば、「文字「0」のUnicodeってなんだっけ?」と言うときには、文字コード表を調べて「0x0030」ということが分かりますよね? で、それを(わざわざ)10進変換して「48」としても良いんですが、その状態のソースを後からメンテナンスする人が見ると、 「文字コードの10進表記値の48って、16進表記すると何だ?」という事で、わざわざ16進変換して「0x0030」ということが分かり、その値から文字コード表を調べて文字「0」で有ることが分かる。 って事で、10進←→16進の変換が無駄だと思うんですが.... 如何でしょうか? | ||||||||
|
投稿日時: 2006-06-12 14:50
これほど意見をいただけるとは思いませんでした、ありがとうございます。
>「文字型の整数」では無く「文字コード」で考えた方が良くないですか? >例えば、「文字「0」のUnicodeってなんだっけ?」と言うときには、文字コード表を調べて>「0x0030」ということが分かりますよね? 10進数というのもあるんですよね、正直この文字コードと整数の知識が薄いんです。 サンプルソースでchar型で文字を一文字一文字取り出してchar型にしてるのも、 僕自身これで文字コードは関係ない一意の整数が算出されるのだろうと想像してのであり、 とりあえず、電話番号の自動置換・書式チェックは達成されているのでOKと考えてます。 KOXさん、それがぼくがテストしてる環境では違うものに置換されていまして、 ここで質問した次第です。 デバッグで見ると確かに半角ハイフンなんですが、文字列比較のequalsでtrueにならない 現象が発生しました。 前述のchar型の8722,45それです。 置換処理では"-"で45の方をセットしていたはずなんですが... 前述のソースは、置換はエンコードが掛かる可能性があるものと前提として、 作ったソースです。 |