忍者ブログ
[196] [195] [194] [193] [192] [191] [190] [189] [188] [187] [186]

DATE : 2017/07/24 (Mon)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


DATE : 2006/10/30 (Mon)

java.lang.CharSequence というインタフェースがあります。

このインタフェースは、Java で文字列を表す String クラスや、可変の文字列データの StringBuilder、char 型のデータ列を表す CharBuffer などが実装しており、文字列データを統一して扱えるという点で便利です。

例えば、正規表現を扱う java.util.regex パッケージでは、操作対象として CharSequence を要求します。つまり、String であっても CharBuffer であっても正規表現を使った操作が可能です。

しかし、CharSequence では equals メソッドが定義されていません。つまり、CharSequence 同士で同じ文字列データを表すかどうかを確かめることはできません。

例えば、あるバイト列が特定の文字列を表すかどうかをテストするコードを書いたとします。

// ・string は比較対象の文字列
// ・byteData は、バイト列を表す ByteBuffer オブジェクト
// ・encoding は、文字エンコーディングを表す Charset オブジェクト
CharBuffer stringData = encoding.decode(byteData);

Assert.assertEquals(string, stringData);

「Assert#assertEquals(Object, Object)」は、JUnit の API で、引数に指定されたオブジェクトが同じものかどうか、Object#equals メソッドを使ってテストします。

しかし、例え stringData に正しく string の文字列データが復元できたとしても、このテストは失敗します。

それでは、テストを成功させるためにはどうすれば良いでしょうか。CharSequence には toString メソッドが定義されています。toString メソッドは CharSequence で表される文字列データを String オブジェクトとして返します。すると、以下のようにすればテストは成功します。

CharBuffer stringData = encoding.decode(byteData);

Assert.assertEquals(string, stringData.toString());

そのため、CharSequence 同士を比較する際には、toString メソッドを使って String オブジェクトに変換してから比較することになります。

PR
●この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
●この記事へのトラックバック
この記事にトラックバックする:
忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
06 2017/07 08
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)
ブログ内検索
最近の状況
リンク
カレンダー
06 2017/07 08
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)