Javaのsplit()メソッドでテキストを行ごとに分割する方法とは?

このQ&Aのポイント
  • Javaのsplit()メソッドを使用して、テキストを行ごとに分割する方法を探しています。
  • split()メソッドを使用してテキストを行ごとに分割する場合、空行も1要素として扱われますか?
  • テキストエリアに入力された文字列を行ごとに分割し、X行以上かどうかを判断する方法を教えてください。
回答を見る
  • ベストアンサー

Javaのsplit()メソッドについて

Java初心者です。 あるテキストエリアに入力された文字列が、 X行以上かどうかを判定するために、 split("/r/n",-1)で、1行ごとに区切ってString[]に格納し、 その配列数の要素を確認し、X以上かどうかを判定しようと思っています。 ただ、 空行も1行と判定したいのですが、split("/r/n",-1)の場合、 空行も1要素としてくれるのでしょうか? <例> AAA<CR><LF> BBB<CR><LF> <CR><LF> CCCC<CR><LF> <CR><LF> の場合、3行目や5行目も1要素とみなし、5行として判定してほしいです。 よろしくお願いいたします。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

http://docs.oracle.com/javase/jp/6/api/java/lang/String.html#split%28java.lang.String,%20int%29 で、o を区切りとしたらどうなるか、が 今回のCRLFを区切りにした場合と同様となります。 なお、 /r/n (スラッシュrスラッシュn)では改行文字にはなりません。 バックスラッシュ、または、環境によっては円記号です。 また、テキストエリアの改行がCRLFで正しいかどうかも確認した方がよいでしょう。

Fuji17Fuji
質問者

お礼

ご返信遅くなって申し訳ありません。 ご回答ありがとうございます。 /r/nは\r\nの誤りでした。 ご指摘ありがとうございます。

関連するQ&A

  • splitについて教えてください。

    @name=("ひろと","けいた","はやと","りゅうすけ","とらのすけ"); @str=@name; print "@str\n"; @str=join(";",@str); print "<br>@str\n"; @str=split(/;/,@str); print "<br>@str\n"; 上記のような配列を作成したプログラムを実験で作ってみました。(一部抜粋です。htmlで表記されるようにしています。) ブラウザで見てみると、以下のようになりました。 ひろと けいた はやと りゅうすけ とらのすけ ひろと;けいた;はやと;りゅうすけ;とらのすけ 1 その中の3行目の「1」とだけ表示された理由がわかりません。 splitにより、joinで作成された一つの文字列を、 再び「;」で区切って要素数が5つの配列に戻したかったのですが、 なぜか1と返されてしまいました。 splitの使い方を教えていただけないでしょうか。

    • ベストアンサー
    • CGI
  • 【VB6】項目内に改行コードを含むCSVファイルの読み込み

    いつもお世話になっております。 現在VB6.0にて、CSVファイルを読み込む処理をしています。 ・ファイル読み込みにて1行ファイルを読み込む。 ・Split関数で「,」で区切って項目ごとに配列に保持する。 というロジックで作成しているのですが、 項目内に改行コードが存在する場合にうまく読み込めません。 (1行ずつ読んでるので当然ですが…) 項目内のコードをLF、実際の行の改行をCR+LFで区別すると読み込む のは分かるのですが、項目内の改行コードがCR+LFの場合でも、 正しく読み込みたいです。 以上です。よろしくお願い致します。

  • 【正規表現】【javascript】CR、CR・LF、LF改行コードをLFにしたい

    CR、CR+LF、LFのシステムによって異なる3種類の改行コードを LFに置換したいです。 変数hogeに置換対象の文字列が入っているとして、 hoge.replace(/\r\n/g,"\n").replace(/\r|\n/g,"\n"); とreplaceを使って置換してみました。 うまくいってるようですが、replaceを二度使ってるところが、カッコ悪いなぁと思います。 replace一回ですむような方法がありましたら教えてください。

  • 照合に関するプログラムについて

    2つのファイルを用意して1つが以下のaaa.txtのような数値が記述されているファイルで、もう1つがbbb.txtのようなファイルでこの中の2列目には、aaa.txtに記されている数値が含まれています。 -------aaa.txt------- -------bbb.txt------- 1.4 XMS 2.5 2.5 XMS 2.7 2.7 XMS 1.1 2.1 XMS 1.0               XMS 2.1 XMS 1.4 aaa.txtとbbb.txtそれぞれのテキストないで数字のダブリはない。bbb.txtはaaa.txtの数字をすべて含む。 aaa.txtに記述されている数値を利用して、bbb.txtの2列目で同じ数値を示すものをその数値がある行ごと取り出し、行末にnameという文字を出力し、bbb.txtの数値がaaa.txtのどの数値とも異なればそのままその行を出力するようなプログラムを書きたいと考えました。そこで、下記のようなプログラムを書いて実行したところ、こちらの意図した出力(ccc.txt)が得られませんでした。なぜ、cccのような出力にならなかったのかがわからなくて非常に困っています。どなたかこのプログラムの誤り又はもっと良い書き方を教えていただけないでしょうか。回答よろしくおねがいします。 ------------ccc.txt---------------- XMS 2.5 name XMS 2.7 name XMS 1.1 XMS 1.0 XMS 2.1 name XMS 1.4 name -----プログラム-------- #include<stdio.h> #include<string.h> int main(int argc ,char *argv[]) { FILE *fp[argc],*gp; char x[30]; int linemax,ret; double distance; int i=0; char command[30] = "wc "; char *re="> Nline.txt"; char file1[25],file2[25],file3[25],*ends;  strcat(command,argv[2]);  strcat(command,re);   system(command);  gp=fopen("Nline.txt","r"); fscanf(gp,"%d%s%s%s",&linemax,file1,file2,file3);   system("rm Nline.txt");  fp[0]=fopen(argv[1],"r");  linemax=linemax-1; while(fscanf (fp[0],"%s %lf",x,&distance==9){ while(fscanf(gp,"%lf",&dis)==1){  if(dis==distance){   printf("%s %lf name \n",x,distance);   i=0;   }else if(dis!=distance && i==linemax){    printf("%s %lf \n",x,distance);   i=0;   }   i++; }rewind(gp); } fclose(gp); fclose(fp[0]); return 0; }

  • 正規表現

    テキストファイルからコメント行以外から文字列"bbb"を含む 行をgrepで抽出したいと思っております。 コメント行→"#"で始まる行と"--"で始まる行 先頭にスペースがある場合もあるので、結局 先頭に「0個以上のスペース+("#"or"--")」がある行は対象外 として、文字列"bbb"を含む行をgrepで抽出したいと思っています。 下記、foo.txtの中から下記の抽出対象の2行のみを抽出したい場合、 どういった正規表現を書けばいいか教えてください。 【foo.txt】 aaa bbb → 抽出対象 aaa bbb →抽出対象 # aaa # bbb →抽出対象外 #aaa # aaa --aaa --aaa -- aaa -- bbb →抽出対象外 -aaa -bbb - aaa ご存じの方がいらっしゃいましたら、よろしくお願い致します。

  • マクロの作り方について

    お世話になっております。 エクセルで次のようなテーブルの自動生成マクロを作成したいと考えておりますが、なかなかうまくいきません。 皆さまのお知恵を拝借いたしたく、お願いいたします。 「Data」シート、「Table」シートの2つのシートをエクセルに用意します。 「Data」シートには、200行2列のデータが予め入っています。 1列目にはaaa.F、aaa.W、aaa.R、bbb.F、bbb.W、bbb.Rといった形の文字列が延々と入っています。 2列目には数字のデータが入っています。 行いたいのは、まず1列目のデータを「.」で区切って、2つの配列「st」と「pr」に入れなおすことです。 ただ、単にsplitするだけですと、1列目のデータを分けた際に、 st=(aaa、aaa、aaa、bbb、bbb、bbb) pr=(F、W、R、F、W、R) といった形で同じ値が格納されますが、ダブっている文字ははじく様にしたいのです。 このため、例えばstについて、次のようなマクロを考えたのですが、これだとstをdebug.Print等で出力した際、一番最後のデータだけしか格納されていませんでした。 Dim C As Variant C = Worksheets("DATA").Range("A1:B65000") Dim D As Variant Dim i As Integer Dim st As Variant For i = 1 To 10 D = Split(C(i, 1), ".") If st <> D(0) Then st = D(0) Debug.Print (st)  ↑ここでstを出力している分には、aaa、bbb、cccとダブった文字を省いたすべてのデータが出力されます。 Else End If Next Debug.Print (st)  ↑ここでstを出力すると、最後のデータだけしか出力することができません。  st(3)等、特定の要素を出力しようとしてもできないようです。 stをvariant型にしていることが問題なのかもしれませんが、stをstring型のarrayで定義し、各要素ごとに入力すると、st(0)=aaa、st(1)=aaaといった形で同じ値のものも入ってしまいます。 異なった文字列だけ各要素に入力していくにはどのようにマクロを組めばよいのでしょうか?

  • toStringメソッドについて

    java言語超初心者です。以下のコードを入力しました。 class MyCls1 { String name; int count; public void look() { System.out.println("名前" + name + "個数" + count); } } class MyCls2 { String name; int count; public void look() { System.out.println("なまえ" + name + "こすう" + count); } public String toString() { String str = "MyCls2:name = " + name + "count=" + count; return str; } } public class JaCls06 { public static void main(String args[]) { MyCls1 bbb = new MyCls1(); bbb.name = "AAA"; bbb.count = 111; bbb.look(); System.out.println(bbb); MyCls2 dd = new MyCls2(); dd.name = "BBB"; dd.count = 2222; dd.look(); System.out.println(dd); String ee; ee = dd.toString(); System.out.println(ee); } } 実行結果が 名前AAA個数111 MyCls1@19821f なまえBBBこすう2222 MyCls2:name = BBBcount=2222 MyCls2:name = BBBcount=2222 なんですが、2行目以降の結果がどの行を反映して出てきたのかが全くわかりません。どうか、教えてください。初歩的な質問で申し訳ないです。

    • ベストアンサー
    • Java
  • 正規表現についてお教え下さい

    正規表現についてお教え下さい。 )以外の全ての文字列(改行・Tab・空白等含む)の1回以上の繰返しという記述は正規表現ではどのような記述になるでしょうか? NoEditorで下記のような条件でgrepしようとしたのですがうまくいきません。 [[^[^\)]] \t\n\r\f]+ 具体的には下記のような5行があった場合、以下のような条件で1、2、3行目を抽出できるということを想定しています。 条件:AAA )以外の全ての文字列の1回以上の繰返し \) ※現状の条件の記述はAAA[[^[^\)]] \t\n\r\f]+\) 1行目 AAAあ(aaa) 2行目 AAA あ(aaa) 3行目 AAA あ 4行目 (aaa) 5行目 AAA)

  • PHPで外部CSSファイルの読み込みに不具合

    aaa.html bbb.css ccc.php があるとします。 aaa.htmlでは、<LINKを使ってbbb.cssを読み込んでいます。 ccc.phpにてprint();を利用して、aaa.htmlとまったく同じhtmlを記述しました。 aaa.htmlとccc.phpが同じ表示のされ方になって欲しいのですが、PHPのprint();で書かれたhtmlでは、どうも外部CSSファイルで、読み込めない要素があるようです。 【bbb.cssで読み込めないと思われる要素】 body.type01{} table.type01{} td.type01{} 【きちんと読み込めた要素】 h1.type01{} 以上、PHPのprint();で書いたhtmlでは、外部CSSファイルで読み込めない要素があるのでしょうか? 解決策等ありましたらご教示下さい。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • Perlについて教えてください!

    入力ファイルには AAA␣aaa␣AaAa 改行 BBB␣bAb␣BbBb 改行 CCC␣Abc␣CcCc 改行 DDD␣.... というように文字列がスペースおきに3つ記載されていて最後は改行されている文が複数行ある場合、 文の2つ目のaaa、bAb、Abc…のみを配列に格納したい場合のプログラムを教えてください。

    • ベストアンサー
    • Perl