Category: Java

14-9.StringTokenizer

 
 

9.StringTokenizer 
 Stringクラスの文字列を例えばスペースや改行などで単語ごとに切り分けたりすることができる。通常はスペース、改行、タブが単語(以下トークン)とトークンの区切り(以下デリミタ)文字だが、プログラマーが他の文字を指定することもできる。
 このクラスを使ってトークンに区切る場合は、まずStringTokenizerのコンストラクタで元になる文字列と必要ならばデリミタを指定する。このクラスはEnumerationインターフェースで元になる文字列と必要ならばデリミタを指定する。このクラスはEnumerationインターフェースをインプリメントしているのでそのインターフェースのnextElement( )メソッドまたはnextToken()メソッドを呼び出すことで次々にトークンを得ることができる。これをhasMoreElements()メソッドまたはhasMoreTokens()がfalseになるまで繰り返すことで、全トークンにアクセスする。

import java.util.StringTokenizer

コンストラクタ
StringTokenizer(String str)
      指定された文字列に対する StringTokenizer を作成する。
StringTokenizer(String str, String delim)
      指定された文字列に対する StringTokenizer を作成する。
      デリミタには指定した文字列を使用する。delimに" \t\n\r\f"を指定すると1つめのコンストラクタと同じになる。
StringTokenizer(String str, String delim, boolean returnDelim)
      指定された文字列に対する StringTokenizer を作成する。
      デリミタには指定した文字列を使用する。delimに" \t\n\r\f"を指定すると1つめのコンストラクタと同じになる。
      returnDelimがfalseの場合は2つめのコンストラクタと同じになる。trueの場合はデリミタ文字も1つのトークンとして処理されるようになる。
 
メソッド
int countTokens()
      例外を生成せずにトークナイザの nextToken メソッドを呼び出せる回数を計算する。
boolean hasMoreElements()
      トークナイザの文字列で利用できるトークンがまだあるかどうかを判定する。
boolean hasMoreTokens()
      トークナイザの文字列で利用できるトークンがまだあるかどうかを判定する。
Object nextElement()
      文字列トークナイザから次のトークンを返します。戻り値はObjectクラスですが実際はStringクラスが返されますので、必要によってキャストする。
      トークンが残っていない場合にはNoSuchElementExceptionが投げらる。
String nextToken()
      文字列トークナイザから次のトークンを返す。
      トークンが残っていない場合にはNoSuchElementExceptionが投げられる。
String nextToken(String newDelim)
      まずデリミタを指定したデリミタに変更し、文字列トークナイザから次のトークンを返す。新しいデリミタは今後も引き継がれる。
      トークンが残っていない場合にはNoSuchElementExceptionが投げられる。
   
sample) StringTokenizerクラスの基本
import java.io.*;
imoprt java.util.*;

class Test{
     public static void main (String args[ ] ) {
             String str = new String("")
         str += "A long time ago in a galaxy far,\n";
         str += "far away.\n";
         str += "\n";
         str += "A  NEW HOPE \n";
         str += "\n";
         str += "It is a period of civil war,\n";
         str += "Rebel spaceships,striking\n";
         str += "from a hidden base,have won\n";
         str += "their first victory against\n";
         str += "the evil Galactic Empire. \n";

         StringTokenizer token = new StringTokenizer(str);
        
while( token.hasMoreTokens( ) ) {
              
System.out.println( token.nextToken( ) );
           }
       }

}

C:\Java\>java Test map
A
long
time
ago
in
a
galaxy
far,
far
away.
A
NEW
HOPE
It
is
a
period
of
civil
war.
Rebel
spaceships,
striking
from
a
hidden
base,
have
won
their
first
victory
against
the
evil
Galactic
Empire.

C:\Java\>

14-8.String

 
 

8.String 
 Stringクラスは文字列を扱うクラス。「System.out.println("ABCD")」といった"ABCD"は実はStringクラスのインスタンスだったのである。Stringクラスを使うと文字を置換したり、文字列を検索したりすることができるようになる。
 Stringクラスの文字列は「+」演算子を使って結合することができるが、Stringクラス文字列は定数として扱われるため、文字列の長さが変わるような結合などを頻繁に行うと処理時間を要したりする。この場合には、StringBufferクラスを用いる。

import java.lang.String

コンストラクタ
String()
      空の文字列を作成する。
String(String org)
      指定されたorgと同じ文字列を作成する。
String(char[] value)
      指定された文字配列からなる文字列で初期化した文字列を作成する。
              nullが与えられた場合にはNullPointerExceptionが投げられる。
String(char[] value, int offset, int count)
      指定された文字配列からのoffset番目の文字からcountで指定された文字数の文字列を作成する。
      valueがnullの場合にはNullPointerExceptionが投げられる。
      offset, countが範囲外になった場合IndexOutOfBoundsExceptionが投げられる。
String(byte[] bytes, int offset, int count)
      指定されたバイト配列からのoffset番目の文字からcountで指定された文字数の文字列を作成する。プラットフォームのデフォルト文字セットを使用して文字列に変換するため、プラットフォームによって文字化けする可能性もある。
String(byte[] bytes)
      指定されたバイト配列から文字列を作成する。プラットフォームのデフォルト文字セットを使用して文字列に変換するため、プラットフォームによって文字化けする可能性もある。
 
メソッド
int length()
      文字列の文字数を返す。C++などと違って、Javaではunicode文字なので、感じなども1文字とカウントされる。
char charAt(int index)
      index番目の文字を返す。最初の文字は0になる。indexが不正の場合はIndexOutOfBoundsExceptionが投げられる。
byte[] getBytes()
      この文字列をバイト配列に変換する。プラットフォームのデフォルト文字セットを使用するため、他のプラットフォームでは文字化けする可能性がある。
boolean equals(Object str)
      指定したstr(strはStringクラス)と比較する。同じ文字列であればtrueが返される。大文字小文字は区別される。「==」演算子では参照先が同じかを比較する演算子なので、同じ文字列でもfalseが返される場合がある。したがって、文字列の比較にはequals演算子を使う。
boolean equalsIgnoreCase(String str)
      指定した文字列strと比較をする。同じ文字列であればtrueが返される。大文字小文字は区別されない。
int compareTo(String str)
      Unicodeの辞書式に従って文字列を比較する。strの方が辞書の後にあれば負数が、strの方が辞書の前にあれば正数が返される。equalsメソッドでtrueが返される場合には0が返される。strがnullの場合にはNullPointerExceptionが投げられる。
boolean startsWith(String prefix)
      文字列がprefixで始まる場合にtrueが返される。
      引数がnullの場合にはNullPointerExceptionが投げられる。
boolean startsWith(String prefix, int offset)
      offset番目の文字列がprefixで始まる場合にtrueが返される。
      引数がnullの場合にはNullPointerExceptionが投げられる。
boolean endsWith(String suffix)
      文字列がsuffixで終わる場合にtrueが返される。
      引数がnullの場合にはNullPointerExceptionが投げられる。
int indexOf(int ch)
      文字列を最初から最後に向かって検索し、文字(char型ではなくint型にキャストして引数として渡す)chが最初に出てきたインデックスを返す。指定した文字が見つからない場合には-1が返される。
int indexOf(int ch, int fromIndex)
      文字列をfromIndex番目の文字から最後に向かって検索し、文字(char型ではなくint型にキャストして引数として渡す)chが最初に出てきたインデックスを返す。指定した文字が見つからない場合には-1が返される。
int indexOf(String str)
      文字列を最初から最後に向かって検索し、文字列strが最初に出てきたインデックスを返す。指定した文字が見つからない場合には-1が返される。strがnullの場合にはNullPointerExceptionが投げられる。
int indexOf(String str, int fromIndex)
      文字列をfromIndex番目の文字から最後に向かって検索し、文字列strが最初に出てきたインデックスを返す。指定した文字が見つからない場合には-1が返される。
      strがnullの場合にはNullPointerExceptionが投げられます。
int lastIndexOf(int ch)
      文字列を最後から最初に向かって検索し、文字(char型ではなくint型にキャストして引数として渡す)chが最初に出てきたインデックスを返す。指定した文字が見つからない場合には-1が返される。
int lastIndexOf(int ch, int fromIndex)
      文字列をfromIndex番目から最初に向かって検索し、文字(char型ではなくint型にキャストして引数として渡す)chが最初に出てきたインデックスを返す。指定した文字が見つからない場合には-1が返される。
int lastIndexOf(String str)
      文字列を最後から最初に向かって検索し、文字列strが最初に出てきたインデックスを返す。指定した文字が見つからない場合には-1が返される。strがnullの場合にはNullPointerExceptionが投げられる。
int lastIndexOf(String str, int fromIndex)
      文字列をfromIndex番目から最初に向かって検索し、文字列strが最初に出てきたインデックスを返す。指定した文字が見つからない場合には-1が返される。strがnullの場合にはNullPointerExceptionが投げられる。
String substring(int beginIndex)
      この文字列の部分文字列である新しい文字列を返す。部分文字列は指定されたインデックスで始まり、この文字列の最後までになる。例えば"unhappy".substring(2) では "happy" が返される
"矢田亜紀子".substring(2) では "亜紀子" が返される。引数が不正の場合にはIndexOutOfBoundsExceptionが投げられる。
String substring(int beginIndex, int endIndex)
      この文字列の部分文字列である新しい文字列を返す。部分文字列は、指定された beginIndex から始まり、インデックス endIndex – 1 にある文字まで。
      例えば"smiles".substring(1, 5) では "mile" が返される。"北海道、東京、沖縄".substring(4, 6) では "東京" が返される。引数が不正の場合にはIndexOutOfBoundsExceptionが投げられる。
String concat(String str)
      文字列strを最後に連結した文字列を返す。「+」演算子を用いることもできる。
      例) "ABC".concat("DEF") と "ABC"+"DEF"は同じ。
      strがnullの場合にはNullPointerExceptionが投げられる。
String replace(char oldChar, char newChar)
      文字列内のoldCharをnewCharに置換した文字列を返す。
String toLowerCase()
      文字列内の大文字を小文字に変換する。unicodeで比較されますので全角アルファベットなども変換される。
String toUpperCase()
      文字列内の小文字を大文字に変換する。unicodeで比較されますので全角アルファベットなども変換される。
String trim()
      文字列のコピーを返す。ただし、最初と最後の空白文字(\u0020以下の文字)は省略される。全角スペースは削除されない。
char[] toCharArray()
      文字列をchar配列に変換する。
void insertElementAt(Object obj, int index)
      Vectorの指定されたindexに、指定されたオブジェクトを要素として挿入する。
String valueOf(Object obj)
      objのtoStringが呼ばれます。objがnullの場合は"null"が返される。デバッグ作業中やエラーメッセージでそのクラスのインスタンスの中身を表示させたい時などにも利用される。
String valueOf(boolean b)
      bがtrueの場合は"true"が、falseの場合は"false"が返される。デバッグ作業中やエラーメッセージでそのクラスのインスタンスの中身を表示させたい時などにも利用される。
String valueOf(char ch)
      chの文字をString型に変換した1文字の文字列が返される。
String valueOf(int n)
      nを文字列に変換した文字列が返される。例えばn=100ならば"100"が返される。
String valueOf(long n)
      nを文字列に変換した文字列が返され
。例えばn=100ならば"100"が返される。
String valueOf(float n)
      nを文字列に変換した文字列が返される。例えばn=100ならば"100"が返される。
String valueOf(double n)
      nを文字列に変換した文字列が返される。例えばn=100ならば"100"が返される。
   
sample) Stringクラスの基本
import java.io.*;
imoprt java.util.*;

class Test{
     public static void main (String args[ ] ) {
         //equalsメソッドと==演算子の違い
         //==演算子はインスタンスが同じものかどうかを調べ、その内容を調べない。
         //equalsメソッドは、インスタンスが違っても、内容が同じであればtrueを返す。
       ZString str1 = new String ("矢口真里" );
       ZString str2 = new String ("矢口真里" );

       ZSystem.out.print( "str1 == str2 : " );
       ZSystem.out.print( str1 == str2 );
       ZSystem.out.print( "str1.equals(str2) : " );
       ZSystem.out.print( "str1.equals(str2)  );
       ZSystem.out.print( );

         //replaceの例(C言語などと違い、2バイト文字もJavaでは1文字である)
       ZSystem.out.print( str1.replace(’理’,’里’) );
       ZSystem.out.print( );

         //contactメソッドと+演算子
       Zstr2 = "abcde"
       ZSystem.out.print( "\"123\" + "123" + str2 );
       ZSystem.out.print( "\"123\".contact(str2) : "123".contact(str2) );
       ZSystem.out.print( );

         //パス名からファイル名などを取り出す例
       ZSystem.strFileName;
       ZSystem.strPath;
       ZSystem.strSttribute;
         str1 = "C:\\Document and Settings\\administrator\\デスクトップ\\新しいフォルダ\\test.java";

         //拡張子
       Ztry {
            strAttribute = str1.substring( str1.lastIndexOf( ’,’), str1.length( ) ) ;
       }
catch(IndexOutOfBoundsException e) {
            strAttribute = "";
        }
         //パス名
       Ztry {
            strPath = str1.substring( 0,str1.lastIndexOf(’\\’) ) ;
       }
catch(IndexOutOfBoundsException e) {
            strPath = "";
        }
         //ファイル名
       Ztry {
            strFileName = str1.substring( str1.lastIndexOf( ’\\’)+1, str1.length( ) ) ;
       }
catch(IndexOutOfBoundsException e) {
            strFileName = "";
        }

       ZSystem.out.println("拡張子 : " + strAttribute);
       ZSystem.out.println("パス名 :" + strPath );
       ZSystem.out.println("ファイル名 : " + strFileName);
       }
}

C:\Java\>java Test map 
str1 == str2 : false 
str1.equals(str2) : true 

矢口真里 
"123" + str2 : 123abcde 
"123".concat(str2) : 123abcde 

拡張子:.java 
パス名:C:\Documents and Settings\administrator\デスクトップ\新しいフォルダ 
ファイル名:test.java 

C:\Java\>

14-6.Hashtable

 
 

6.Hashtable 
 Hashtable は辞書のようなコンテナである。Vectorや配列は順番にオブジェクトを格納し、インデックス(添字)で格納場所を指定していた。Hashtableは添字(数字)で格納場所を指定するのではなく、クラスのオブジェクトで格納場所を指定する。格納場所を指定するオブジェクトをキーといい、格納されるオブジェクトを値(バリュー)という。
 例えば、キーに英単語を格納し、値にその日本語訳を格納すると、英和辞書を作ることができる。このように何かと何かを対応づけるような場合に使用する。含まれるすべての値にアクセスしたい場合はelementsメソッドを、すべてのキーにアクセスしたい場合にはkeysメソッドを用いる。

import java.util.Hashtable

コンストラクタ
Hashtable()

デフォルトの初期容量(11)でHashtableを作成する

Hashtable(int intialCapacity)

初期容量を指定してHashtableを作成する。初期容量を超えて追加(put)使用とした場合は容量を更新する作業が行われるため、時間がかかる場合がある。

メソッド
void clear()
このHashtableの中身を消去する
Object clone()
このHashtableのコピーを作成する。格納されているキーや値はコピーされない。
boolean contains(Object value)
指定された値が格納されていればTrueを格納されていなければFalseが返される。containsKeyよりも時間がかかる。
boolean containsKey(Object key)
指定されたキーが格納されていればTrueを格納されていなければFalseが返される。
Enumeration elements()
ハッシュテーブルにある値のリストを返す。
Enumeration keys()
ハッシュテーブルにあるキーのリストを返す。
Object get(Object key)
指定されたキーに対応する値を返す。対応する値がない場合はnullが返される。
boolean isEmpty() 
このHashtableがからならTrueを、何かが登録されていればFalseを返す。
Object put(Object key, Object value)
キーに対する値を格納する。key, valueともにnullは受け付けず、NullPointerExceptionを返す。すでに同じキーがある場合、前の値が戻り値として返され、キーがなかった場合にはnullが返される。
Object get(Object key)
キーに対する値を返す。keyはnullの場合またはキーが登録されていない場合はnullが返される。
Object remove(Object key)
指定したキーを削除する。そのキーに対する値が返されるが、なければnullが返される。
int size()
    登録されている項目数を返します。
   
sample) Hashtableクラス
import java.io.*;
imoprt java.util.*;

class Test{
     public static void main (String args[ ] ) {
       ZHashtable table = new Hashtable( );

         //辞書追加
         table.put("pen","ぺン");
         table.put("apple","リンゴ");
         table.put("hand","手");
         table.put("summer","夏");

         //引数がなければ終了
         if ( args.length == 0 )
               System.exit(-1) ;

         String str = (String)table.get( args[0] );
         if ( str == null ) 
               System.out.println("そんな言葉は知りません") ;
         if
               System.out.println(str) ;
    }
}

C:\Java\>java Test map
そんな言葉は知りません

C:\Java\>java Test apple
リンゴ

C:\Java\>