• ベストアンサー

StringTokenizer

StringTokenizerで2つの文字を区切り文字にすることって出来ますか?

  • Java
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
回答No.3

Anko Motiさん StringTokenizerで文字列を分割する際に、URLのパラメータのように区切り文字の並びに規則があるのであれば、StringTokenizerを入れ子にしたら実現できると思います。 ======================================================= [SampleTokenizer.java] ======================================================= import java.util.*; public class SampleTokenizer { public static void main(String args[]) { String str = "data1=x&data2=y&data3=z"; // '&'で文字列を分割する StringTokenizer tk1 = new StringTokenizer( str, "&" ); while ( tk1.hasMoreTokens() ) { // '='で文字列を分割する StringTokenizer tk2 = new StringTokenizer( tk1.nextToken(), "=" ); int sw = 0; while ( tk2.hasMoreTokens() ) { if ( sw == 0 ) { System.out.print( "変数 : " + tk2.nextToken() + ", " ); sw = 1; } else { System.out.println( "値 : " + tk2.nextToken() ); sw = 0; } } } } } ======================================================= [実行結果] C:\>java SampleTokenizer 変数 : data1, 値 : x 変数 : data2, 値 : y 変数 : data3, 値 : z ======================================================= また、区切り文字の位置に規則性がなく、とにかく分割したいのであれば、StringTokenizerのインスタンスを作成する際に、第二引数に区切り文字に指定したい文字を羅列すると、複数の区切り文字が指定できます。 ======================================================= [SampleTokenizer2.java] ======================================================= import java.util.*; public class SampleTokenizer2 { public static void main(String args[]) { String str = "data1=x=X&data2=y&Y&data3=z=Z"; // '&'と'='で文字列を分割する StringTokenizer tk1 = new StringTokenizer( str, "&=" ); while ( tk1.hasMoreTokens() ) { System.out.println( "値 : " + tk1.nextToken() ); } } } ======================================================= [実行結果] C:\>java SampleTokenizer2 値 : data1 値 : x 値 : X 値 : data2 値 : y 値 : Y 値 : data3 値 : z 値 : Z ======================================================= いかがでしょうか?

その他の回答 (2)

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

データ部分に区切り文字がない、単純な区切りなら String#split()でできますよ。 *JAVA1.4以降必須です。

回答No.1

できません。 指定した区切り文字列に含まれる文字のうち1つでもあれば、その1文字で区切ろうとします。 文字列で区切りたい場合は、大変ですが自作するしかありません。

関連するQ&A

  • StringTokenizerについて

    JAVAの勉強をしているのですが、StringTokenizerの役割がよく分かりません。検索サイトを使って色々調べてみたのですが、「トークンを区切る」だとかよく分からない言葉が出てきて全く理解できません。以下はあるデータから項目を抽出するプログラムらしいのですが、参考としてこの例でStringTokenizerがどのような役割を果たしているのか教えて下さい。複雑で説明しにくければStringTokenizerそのものの説明でも十分です。よろしくお願いします。 BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); String line=""; try { int i=0; while ((line = reader.readLine()) != null) { int fcount=1; StringTokenizer st = new StringTokenizer(line); while (st.hasMoreTokens()) { switch (fcount) { case 2: //項目2:被説明変数Y data[i][0]=Integer.parseInt(st.nextToken()); break; case 4: //項目4:説明変数X data[i][1]=Integer.parseInt(st.nextToken()); break; default: // その他の項目 String dummy=st.nextToken(); break; } fcount++; } i++; } NofData=i;

    • ベストアンサー
    • Java
  • クラス StringTokenizerのコンストラクタ

    あるCSVファイルから行を読み込んで、以下のように文字列を配列に格納しようとしたのですが、カンマとカンマの間の文字列がNULLの時に、次のカンマにある文字列がずれて格納されてしまいます。 例外処理(if文)で処理を振り分けるなどとして、NULLもきちんと配列におさめるにはどのようにすればよろしいのでしょうか? ・ ・ line = csvfile.readLine(); StringTokenizer analy = StringTokenizer(line,","); String[] moji = new String[analy.countTokens()]; for (int n=0; n<moji.length; n++){ moji[n] = analy.nextToken(); } ・ ・

    • ベストアンサー
    • Java
  • StringTokenizerについて(エラー)

     java初心者です。この度、突貫工事でjavaのネットワークプログラムを作らねばならず、本などを参考にしながら独学でサーバーとクライアントを作成しています。 クライアントは正常に稼働するようなのですが、サーバーにはStringTokenizerの使い方に問題があるらしく、NullPointerExceptionというエラーが出て受信がうまくできません。(以下、エラーが検出される個所を抜粋) …………… ////runメソッド //クライアント処理スレッドの本体です public void run(){ try{ //logout受信まで繰り返します while(true){ //クライアントからのコマンドを読み取ります String line = in.readLine(); //nameが空の場合にはログインコマンドのみを受け付けます。 if(name == null){ StringTokenizer st= new StringTokenizer(line);////エラー箇所 String cmd = st.nextToken(); if("login".equalsIgnoreCase(cmd)){ name = st.nextToken(); server.loginUser(name);//loginメソッドへ } }else{ //nameが空でない場合はログイン済みなのでコマンドを受け付けます。 StringTokenizer st = new StringTokenizer(line); String cmd=st.nextToken();//コマンドの取り出し if("logout".equalsIgnoreCase(cmd)){ server.logoutUser(name);//logoutメソッドへ break;//logoutの場合にはループを終了します。 } } } ……………… 提出期限が迫っており、また、周囲にjavaの心得がある人がいないので困っています。不勉強で申し訳ありませんが、どなたか回答宜しくお願いします。 追伸:プログラムに関する知識が乏しいので用語の使い方が間違っているかもしれませんがご容赦ください。。。

  • StringTokenizerで連続するデリミタ

    よろしくお願いします。 今、半角スペース(デリミタ)で区切られたデータファイルから、 データを読み込むプログラムをStringTokenizer作ったのですが、 対象のデータがない時はデリミタ続きでファイルが作成されるので、 StringTokenizerではデリミタが連続してしまったものを飛ばして次のデータを読み込んでしまいます、 デリミタが続いても1つのデータとして取り出す方法はないでしょうか、 教えてください。 例)「this is a pen」 『a』と『pen』間に半角スペースが2個は入っていると、 this is a pen = StringTokenizer(str," ") => [this] [is] [a] [pen] と取って来てしまいますが、 実現したいのは 「this is a pen」なら[this] [is] [a] [] [pen]と『a』と『pen』間のデリミタ続きも1データとして認識してほしいのです。 よろしくお願いします。

  • readLineとStringTokenizerで一行ずつ計算するプログラムでエラーが出る

    初めに行数があり、次に6つのスペースで区切られた数字を一行ずつ計算していくというプログラムが作りたいのですが、実行後 Exception in thread "main" java.lang.NullPointerException at java.util.StringTokenizer.<init>(StringTokenizer.java:182) at java.util.StringTokenizer.<init>(StringTokenizer.java:219) at example.main(example.java:36) のようなエラーが出てきます。下記がそのプログラムですが、stのコンストラクタがループの中に入っているせいだと思い、ループの外でコンストラクトしようと考えたのですがうまくいかずいきづまってしまいました。 どなたかご教示いただけませんでしょうか。よろしくお願いいたします。 int c=0; String line ; int ln = Integer.parseInt(br.readLine()); for(int i = 0; i < ln; i++) { line=br.readLine(); StringTokenizer st = new StringTokenizer(line); for(j = 0; j <= 5; j++) { c=Integer.parseInt(st.nextToken()); intArray[j]=c; } (計算) }

    • ベストアンサー
    • Java
  • StringTokenizerについて

    ファイルの読み込みをStringTokenizerを使ってやりたいのですが、 使い方がいまいち理解できません。今自分で作っているプログラムでは効率が悪いです。 プログラムの一部を載せるのでアドバイスお願いします。 <プログラム> InputStreamReader fisr = new InputStreamReader(client. getInputStream()); BufferedReader fin = new BufferedReader(fisr); String name = fin.readLine(); System.out.println(name); while(n!=10){ FileInputStream objFis = new FileInputStream("eitango"+rand[n]+".txt"); InputStreamReader objlsr = new InputStreamReader(objFis,"Shift_jis"); BufferedReader objBr = new BufferedReader(objlsr); PrintWriter out = new PrintWriter(client.getOutputStream(),true); //1行ずつファイルを読み込む if (n==0){ out.println("Hello,clientNo:" + number +"\n"); } for(a=0;a!=6;a++){ if(a==5){ String ans = objBr.readLine(); ans2 = ans.length(); System.out.println("ans2 = "+ans2); } if(a!=5){ out.println(objBr.readLine()); } }

    • ベストアンサー
    • Java
  • 改行コード(\n)を削除したい場合

    テキストエリア(Swing)に "test1" "test2" と入力されたものを、 ひとつにつなげたいのですが、 test1の後に\n?が入っているため、 うまくつながりません・・・。 どうすれば\nを消せるでしょうか? ちなみにtest1に対してindexOf('\n');で検索したら-1とでます。 2つの文字列はStringTokenizer st = new StringTokenizer(txtAreaString, "\n"); で取得しています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • ファイルから複数行のトークンを文字列検索。

    input.txt から "," で区切られた文字列をトークンで分け、 左がパターン、右が検索する文字列になります。 一行の場合は while((line = brInput.readLine())!= null ) { StringTokenizer st = new StringTokenizer(line, ","); if(st.hasMoreTokens()){ pattern = st.nextToken(); text = st.nextToken(); } これでマッチするだけなのですが、複数行の場合はどうでしょうか?

    • ベストアンサー
    • Java
  • Stringの一部分を取得したいのですが

    教えていただきたいのですが。。 Stringで、"0-1-4-2-10"と文字が入っているとして、最後の"-"以降の"10" という文字を取得したいのですが、いい方法はないでしょうか? "-"以降の文字は桁数もバラバラなので、「substringで最後から何番目を取得」 とすることができません。。 StringTokenizerで"-"で区切って、最後の"-"以降の文字(何桁でも)だけ取得とかはできるのでしょうか?? 教えてください、お願いします

    • ベストアンサー
    • Java
  • デリミタ文字でページ分割

    JAVAで、A.txtというファイルを、デリミタ文字ごとにA_1.txt,A_2.txtとページ分割する方法を教えてください。 StringTokenizerは使えますか。