- - PR -
Stringの配列での空欄認識する方
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-06-01 15:20
お世話になってます。
質問ばかりですみませんが、よろしくお願いします。 Stringの配列で、空欄認識する方法を教えてください。 //カンマ区切りのTokenizerを作成 StringTokenizer st = new StringTokenizer(line, "|"); // データ数だけstring配列を作成 String data[] = new String[st.countTokens()]; int i = 0; while (st.hasMoreTokens()) { data[i] = st.nextToken(); i++; } System.out.println(data[0]) 空欄の配列が抜かされる、、、 データ例: |||0011| |999||0011| 出力: 0011 999 1つ目の行の出力を、空欄にしたいのですが、空欄認識していないようです。 | ||||
|
投稿日時: 2006-06-01 15:30
StringTokenizerを使うとそうなります。
String#split(String regex)を使えば幸せになれるんじゃないかな。 | ||||
|
投稿日時: 2006-06-01 15:53
ごめんなさい、これでもダメですね。orz
自分で切り出すしかないかな。 こんな感じ。
| ||||
|
投稿日時: 2006-06-01 18:20
splitならいけますよ。
splitは正規表現を利用しており、'|'は正規表現で特殊な意味を持つので、エスケープしてやる必要があるんです。 split("\\|"); とやってみて下さい。 詳しくは、java.util.regex.Patternのドキュメントを参照してください。 | ||||
|
投稿日時: 2006-06-02 09:13
ありがとうございます。
String[] str = line.split("\\|",0); で空欄認識することができました。 しかし、 データ: |||00:11| |999||00:11| |999||| で、str[2]の値『0011』(:を抜かした値)を取得したいのですが、エラーがでます。 System.out.println(str[2].substring(0,1) + str[2].substring(3,4)); Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind ex out of range: 1 at java.lang.String.substring(String.java:1441) at Sample.main(Sample.java:110) 下記の@〜B場合でもエラーが出ます。 Cではうまくいきます。 @System.out.println(str[2].substring(0,1)); Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind ex out of range: 4 at java.lang.String.substring(String.java:1441) at Sample.main(Sample.java:110) ASystem.out.println(str[2].substring(0,2)); Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind ex out of range: 2 at java.lang.String.substring(String.java:1441) at Sample.main(Sample.java:110) BSystem.out.println(str[2].substring(0,3)); Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind ex out of range: 3 at java.lang.String.substring(String.java:1441) at Sample.main(Sample.java:110) CSystem.out.println(str[2].substring(0)); なぜ値が取れないのか不明です。 よろしくお願いします。 | ||||
|
投稿日時: 2006-06-02 09:30
str[2]が本当に"00:11"かどうか、確認してみてください。 | ||||
|
投稿日時: 2006-06-02 09:33
String#substringの使い方とStringIndexOutOfBoundsExceptionをリファレンスで確かめてください。
例外の意味を理解しないで使っているといつまでもエラーに悩むことになりますよ。 単純にコロンを取り除きたいのであれば、Javaのバージョンが1.4以上であればString#replaceAllを使うのが簡単です。 1.3以下であれば文字列にコロンがあるかをString#indexOf等で調べて地道にやるしかないと思います。 _________________ 己への戒め 「活動的な馬鹿より恐ろしいものはない」 by ゲーテ | ||||
|
投稿日時: 2006-06-02 09:39
すみません、自己解決しました。
str[2]がNULLじゃないとき、という条件を付け忘れていました。 |