• ベストアンサー

StringTokenizerを使用して、連続した区切り文字を見分ける方法

文字列を改行コードごとに区切り、Vectorに格納していきたいと思っています。 例) あ\r\nい\r\nう\r\nえ\r\nお\r\n という文字列を 「あ・い・う・え・お」と分けてVectorに格納する。 そこで、改行コードが連続してきた場合に「連続して改行コードがきた!!」ということが分かるようにVectorに格納したいと思っています。 例) あ\r\nい\r\nう\r\nえ\r\n\r\nお\r\n という文字列が来たら、「あ・い・う・え・☆・お」のような感じで、 連続して改行コードが来たら、何か特定の文字を詰めるなど。 どなたかいい方法を教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.2

大雑把なコードですけど (^^; 改行コードですからStringTokenizerよりもBufferedReaderを使ってみました。 String fix=""; String str="あ\r\nい\r\nう\r\nえ\r\n\r\nお\r\n"; try{   BufferedReader br=new BufferedReader(new StringReader(str));   String s="";   while((s=br.readLine())!=null){     if("".equals(s)){       fix=fix+"☆";     }     else{       fix=fix+s;     }   } } catch(IOException e){ } System.out.println(fix);

taaar
質問者

お礼

お礼が遅くなって申し訳ありません。 大変助かりました。。 文字列の分割はStringTokenizerだ!と決め付けていましたが、ほかにも方法があったのですね。 ありがとうございました。

その他の回答 (1)

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

問題は、改行コードが \r と \n の2文字で一つの改行を表わしている点と、StringTokenizer クラスが「連続する区切り」に対応していない点です。 したがって、StringTokenizer クラスでは、あなたのやりたいことを実現させることは困難です。自前でプログラムを書くことをおすすめします。 例えばこんな感じです。(注: 正しく動くかどうかの確認はしてません) String str = "あ\r\nい\r\nう\r\nえ\r\n\r\nお\r\n"; String delim = "\r\n"; Vector v = new Vector(); int index1 = 0, index2; while ((index2 = str.indexOf(delim, index1)) >= 0) { v.add(str.substring(index1, index2)); index1 = index2 + 2; // 2 は delim の文字数。 } 改行コードはすべて \r\n であることを前提としたプログラムです。改行コードが連続しているところでは、空の文字列 "" が Vector に入ります。 あるいは、String クラスの split メソッドを使う方法も考えられます。 String str = "あ\r\nい\r\nう\r\nえ\r\n\r\nお\r\n"; String delim = "\r\n"; String[] result = str.split(delim); // 後は、result 配列の中の要素を Vector にコピーするだけです。

taaar
質問者

お礼

お礼が遅くなって申し訳ありません。 大変助かりました。。 splitメソッドを使用するのが簡単だと思って試したのですが、そのメソッドはありませんというエラーになってしまいました。 バージョンが違うのかもしれません。 いろいろなアイデアありがとうございました。

関連するQ&A