ts.util.text
クラス StringSequence

java.lang.Object
  上位を拡張 ts.util.text.StringSequence
すべての実装されたインタフェース:
java.lang.Cloneable

public final class StringSequence
extends java.lang.Object
implements java.lang.Cloneable

文字列をコード・ポイント単位に順次アクセスするためのクラス。
Unicodeの補助文字の対応(JSR-204)により、文字とchar変数が 必ずしも対応しなくなり、文字列操作におけるインデックスの扱いが複雑に なった。このクラスは、そのインデックスの扱いを簡単にするための仕組みを StringOperationとともに用意する。
文字列中のインデックスを、コード・ポイントごとに進めたり戻したりして、 そのインデックスに位置する文字を取得したり、そのインデックスから開始する 部分文字列を取得したりすることができる。
インデックスの取り得る値の範囲は、-1〜n (n はコード・ポイント単位 の文字列長)であり、インデックスが-1又はnの場合は、それに 位置する文字として空文字列を返す。

先頭から文字を順番に取得する方法は、以下のように行うことができる:

     for (StringSequence seq = new StringSequence(aStr);
         seq.validIndex(); seq.next()) {
       String chStr = seq.character();     // 文字を順に取得。
       String subStr = seq.substring();    // 現在のインデックスから開始する部分文字列を取得。
       ...
     }

     あるいは

     StringSequence seq = new StringSequence(aStr, -1);
     while (seq.hasNext()) {
       seq.next();
       String ch = seq.character();      // 文字を順に取得。
       String subStr = seq.substring();  // 現在のインデックスから開始する部分文字列を取得。
       ...
     } 

     あるいは

     if (! StringOperation.isEmpty(aStr)) {
       StringSequence seq = new StringSequence(aStr, -1);
       do {
         String chStr = StringOperation.characterAt(seq.index() + 1); // 文字を順に取得。
         String subStr = seq.followingString();  // 現在のインデックスの次から開始する部分文字列を取得。
         ...
       } while (seq.next().validIndex());
     }
上記の例は、いずれも同じ文字や文字列の値が得られる。

バージョン:
$Revision: 1.1.1.1 $, $Date: 2010-10-16 00:03:53 $
作成者:
佐藤隆之.

コンストラクタの概要
  StringSequence(java.lang.String str)
          操作対象の文字列を引数にとるコンストラクタ。
  StringSequence(java.lang.String str, int beginCodePointIndex)
          操作対象の文字列と開始インデックスを引数にとるコンストラクタ。
protected StringSequence(StringSequence seq)
          コピー・コンストラクタ。
 
メソッドの概要
 java.lang.String character()
          現在のインデックスに位置する文字を取得する。
 boolean contains(java.lang.String searched)
          現在のインデックスから文末までの部分文字列に、探索文字列が含まれているか どうかを判定する。
 StringSequence copy()
          このオブジェクトのコピーを作成する。
 boolean endsWith(java.lang.String suffix)
          現在のインデックスから文末までの部分文字列の末尾が、サフィックスと一致する かどうかを判定する。
 boolean equals(java.lang.Object obj)
          文字列の内容が等しいかどうかを確認する。
 java.lang.String followingString()
          現在のインデックスの次から開始する部分文字列を取得する。
 java.lang.String followingString(StringSequence endSeq)
          現在のインデックスの次から、指定されたStringSequenceの示すインデックスの前までの部分文字列を取得する。
 int hashCode()
          このオブジェクトのハッシュ・コード値を取得する。
 boolean hasNext()
          後続の文字が存在するかどうかを確認する。
 boolean hasPrevious()
          前に文字が存在するかどうかを確認する。
 int index()
          現在のインデックスを取得する。
 int indexOf(java.lang.String searched)
          現在のインデックスから文末までの文字列中で、探索文字列に最初に一致する インデックスを取得する。
 int lastIndexOf(java.lang.String searched)
          現在のインデックスから文末までの文字列中で、探索文字列に最後に一致する インデックスを取得する。
 StringSequence next()
          インデックスを、コード・ポイント1つ分次に進める。
 StringSequence next(int codePointCount)
          インデックスを、指定された文字数分だけ次に進める。
 StringSequence nextUntil(java.lang.String searched)
          指定された探索文字列が見つかるまで、インデックスを次に進める。
 StringSequence previous()
          インデックスをコード・ポイント1つ分前に戻す。
 StringSequence previous(int codePointCount)
          インデックスを、指定された文字数分だけ前に戻す。
 int restLength()
          現在のインデックスから文末までの文字列の長さを取得する。
 StringSequence skipWhitespaces()
          空白でない文字が現れるまで、インデックスを次に進める。
 boolean startsWith(java.lang.String prefix)
          現在のインデックスから文末までの部分文字列の先頭が、プリフィックスと一致 するかどうかを判定する。
 java.lang.String startsWithOneOf(java.util.Collection<java.lang.String> strs)
          現在のインデックスから文末までの部分文字列の先頭が、指定された文字列集合 の要素のいずれかと一致するかどうかを判定する。
 StringSequence startsWithOneOf(java.util.Collection<StringSequence> seqs)
          現在のインデックスから文末までの部分文字列の先頭が、指定された文字列集合 の要素のいずれかと一致するかどうかを判定する。
 java.lang.String substring()
          現在のインデックスから開始する部分文字列を取得する。
 java.lang.String substring(StringSequence endSeq)
          現在のインデックスから、指定されたStringSequenceの示すインデックスの前までの部分文字列を取得する。
 boolean validIndex()
          現在のインデックスが範囲内(0〜n-1、nはコード・ポイント単位の文字列長) にあるかどうかを確認する。
 
クラス java.lang.Object から継承されたメソッド
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

StringSequence

public StringSequence(java.lang.String str)
操作対象の文字列を引数にとるコンストラクタ。

パラメータ:
str - 操作対象の文字列。
例外:
java.lang.AssertionError - 引数がヌルの場合(デバッグ・モードのみ)。

StringSequence

public StringSequence(java.lang.String str,
                      int beginCodePointIndex)
               throws java.lang.IndexOutOfBoundsException
操作対象の文字列と開始インデックスを引数にとるコンストラクタ。
なお、ここでいうインデックスとは、コード・ポイント単位の先頭からの順番 である。インデックスの取り得る範囲は、-1〜n(nはコード・ポイント 単位の文字列長)である。

パラメータ:
str - 操作対象の文字列。
beginCodePointIndex - 開始インデックス。
例外:
java.lang.IndexOutOfBoundsException - 開始インデックスが範囲外の場合。
java.lang.AssertionError - 引数がヌルの場合(デバッグ・モードのみ)。

StringSequence

protected StringSequence(StringSequence seq)
コピー・コンストラクタ。

パラメータ:
seq - StringSequenceオブジェクト。
例外:
java.lang.AssertionError - 引数がヌルの場合(デバッグ・モードのみ)。
メソッドの詳細

copy

public StringSequence copy()
このオブジェクトのコピーを作成する。

戻り値:
このオブジェクトのコピー。

equals

public boolean equals(java.lang.Object obj)
文字列の内容が等しいかどうかを確認する。
現在のインデックスから開始する部分文字列の値を比較して、それが等しい場合 はtrueを、等しくない場合はfalseを返す。
引数が StringSequenceオブジェクトで ない場合は常にfalseを返す。

オーバーライド:
クラス java.lang.Object 内の equals
パラメータ:
obj - 比較を行うStringSequence オブジェクト。
戻り値:
現在のインデックスによる値が等しい場合はtrueを返す。

hashCode

public int hashCode()
このオブジェクトのハッシュ・コード値を取得する。

オーバーライド:
クラス java.lang.Object 内の hashCode
戻り値:
ハッシュ・コード値。

validIndex

public boolean validIndex()
現在のインデックスが範囲内(0〜n-1、nはコード・ポイント単位の文字列長) にあるかどうかを確認する。
なお、ここでいうインデックスとは、コード・ポイント単位の値をいう。

戻り値:
現在のインデックスが範囲内にある場合はtrueを返す。

hasNext

public boolean hasNext()
後続の文字が存在するかどうかを確認する。

戻り値:
後続の文字が存在すればtrueを返す。

hasPrevious

public boolean hasPrevious()
前に文字が存在するかどうかを確認する。

戻り値:
前に文字が存在すればtrueを返す。

next

public StringSequence next()
インデックスを、コード・ポイント1つ分次に進める。
インデックスの取り得る範囲は-1〜n(nはコード・ポイント単位の文字列長)で あり、次に進めるとこの範囲から外れる場合は、インデックスを移動しない。
なお、ここでいうインデックスとは、コード・ポイント単位の値をいう。

戻り値:
インデックスを移動した後のこのオブジェクト。

next

public StringSequence next(int codePointCount)
インデックスを、指定された文字数分だけ次に進める。
引数に負の値を指定した場合は、指定された文字数分前に戻す。
インデックスの取り得る範囲は-1〜n(nはコード・ポイント単位の文字列長)で あり、次に進めるとこの範囲から外れる場合は、-1又はnにリミットをかける。
なお、ここでいうインデックスや文字数は、コード・ポイント単位の値をいう。

パラメータ:
codePointCount - 次に進める文字数。
戻り値:
インデックスを移動した後のこのオブジェクト。

previous

public StringSequence previous()
インデックスをコード・ポイント1つ分前に戻す。
インデックスの取り得る範囲は-1〜n(nはコード・ポイント単位の文字列長)で あり、前に戻すとこの範囲から外れる場合は、インデックスを移動しない。
なお、ここでいうインデックスとは、コード・ポイント単位の値をいう。

戻り値:
インデックスを移動した後のこのオブジェクト。

previous

public StringSequence previous(int codePointCount)
インデックスを、指定された文字数分だけ前に戻す。
インデックスに負の値を指定した場合は、指定された文字数分次に進める。
インデックスの取り得る範囲は-1〜n(nはコード・ポイント単位の文字列長)で あり、前に戻すとこの範囲から外れる場合は、-1又はnにリミットをかける。
なお、ここでいうインデックスや文字数は、コード・ポイント単位の値をいう。

パラメータ:
codePointCount - 前に戻す文字数。
戻り値:
インデックスを移動した後のこのオブジェクト。

index

public int index()
現在のインデックスを取得する。
なお、ここでいうインデックスとは、コード・ポイント単位の値をいう。

戻り値:
現在のインデックス。

character

public java.lang.String character()
現在のインデックスに位置する文字を取得する。
なお、ここでいう文字とは、コード・ポイントに対応する値をいう。

戻り値:
現在のインデックスに位置する文字。

substring

public java.lang.String substring()
現在のインデックスから開始する部分文字列を取得する。

戻り値:
現在のインデックスから開始する部分文字列。

substring

public java.lang.String substring(StringSequence endSeq)
                           throws java.lang.IndexOutOfBoundsException
現在のインデックスから、指定されたStringSequenceの示すインデックスの前までの部分文字列を取得する。
現在のインデックスに位置する文字は、部分文字列に含まれる。 また、引数のオブジェクトが示すインデックスに位置する文字は、部分文字列に 含まれない。
このメソッドは、以下の操作と同様である:
     StringOperatin.substring(this.substring(), 0, endSeq.index())
 

パラメータ:
endSeq - 取得する部分文字列の終了インデックスを保持するStringSequenceオブジェクト。
戻り値:
このオブジェクトが参照する文字列の部分文字列。
例外:
java.lang.IndexOutOfBoundsException - 引数のStringSequenceがこのオブジェクトよりも前のインデックスを指して いる場合。
java.lang.AssertionError - 引数がヌルの場合(デバッグ・モードのみ)。

followingString

public java.lang.String followingString()
現在のインデックスの次から開始する部分文字列を取得する。

戻り値:
現在のインデックスの次から開始する部分文字列。

followingString

public java.lang.String followingString(StringSequence endSeq)
                                 throws java.lang.IndexOutOfBoundsException
現在のインデックスの次から、指定されたStringSequenceの示すインデックスの前までの部分文字列を取得する。
現在のインデックスに位置する文字は、部分文字列に含まれない。 また、引数のオブジェクトが示すインデックスに位置する文字は、部分文字列に 含まれない。
このメソッドは、以下の操作と同様である:
     StringOperatin.substring(this.substring(), 1, endSeq.index())
 
但し、現在のインデックスと引数のオブジェクトの示すインデックスが等しい場合 は空文字列を返す。

パラメータ:
endSeq - 取得する部分文字列の終了インデックスを保持するStringSequenceオブジェクト。
戻り値:
このオブジェクトが参照する文字列の部分文字列。
例外:
java.lang.IndexOutOfBoundsException - 引数のStringSequenceがこのオブジェクトよりも前のインデックスを指して いる場合。
java.lang.AssertionError - 引数がヌルの場合(デバッグ・モードのみ)。

restLength

public int restLength()
現在のインデックスから文末までの文字列の長さを取得する。
なお、ここでいうインデックスとは、コード・ポイント単位の値をいう。

戻り値:
現在のインデックスから文末までの文字列の長さ。

indexOf

public int indexOf(java.lang.String searched)
現在のインデックスから文末までの文字列中で、探索文字列に最初に一致する インデックスを取得する。
探索文字列が見つからなかった場合は、負の値を返す。
なお、ここでいうインデックスとは、コード・ポイント単位の先頭からの順番 (0から開始)である。
このメソッドは、以下の操作と同様である (探索文字列が見つかる場合):
     this.index() + StringOperation.indexOf(this.substring(), searched)
 

パラメータ:
searched - 探索文字列。
戻り値:
探索文字列に最初に一致するインデックス。
例外:
java.lang.AssertionError - 引数がヌルの場合(デバッグ・モードのみ)。

lastIndexOf

public int lastIndexOf(java.lang.String searched)
現在のインデックスから文末までの文字列中で、探索文字列に最後に一致する インデックスを取得する。
探索文字列が見つからなかった場合は、負の値を返す。
なお、ここでいうインデックスとは、コード・ポイント単位の先頭からの順番 (0から開始)である。
このメソッドは、以下の操作と同様である (探索文字列が見つかる場合):
     this.index() + StringOperation.lastIndexOf(this.substring(), searched)
 

パラメータ:
searched - 探索文字列。
戻り値:
探索文字列に最後に一致するインデックス。
例外:
java.lang.AssertionError - 引数がヌルの場合(デバッグ・モードのみ)。

startsWith

public boolean startsWith(java.lang.String prefix)
現在のインデックスから文末までの部分文字列の先頭が、プリフィックスと一致 するかどうかを判定する。

パラメータ:
prefix - プリフィックス。
戻り値:
プリフィックスと一致する場合はtrueを返す。
例外:
java.lang.AssertionError - 引数がヌルの場合(デバッグ・モードのみ)。

endsWith

public boolean endsWith(java.lang.String suffix)
現在のインデックスから文末までの部分文字列の末尾が、サフィックスと一致する かどうかを判定する。

パラメータ:
suffix - サフィックス。
戻り値:
サフィックスが一致する場合はtrueを返す。
例外:
java.lang.AssertionError - 引数がヌルの場合(デバッグ・モードのみ)。

startsWithOneOf

public java.lang.String startsWithOneOf(java.util.Collection<java.lang.String> strs)
現在のインデックスから文末までの部分文字列の先頭が、指定された文字列集合 の要素のいずれかと一致するかどうかを判定する。
一致した場合はその文字列を返し、一致する文字列が存在しなかった場合はヌル を返す。

パラメータ:
strs - 文字列集合。
戻り値:
一致した文字列。
例外:
java.lang.AssertionError - 引数がヌルの場合、又は文字列集合の中にヌル又は 空文字列が含まれている場合(デバッグ・モードのみ)。

startsWithOneOf

public StringSequence startsWithOneOf(java.util.Collection<StringSequence> seqs)
現在のインデックスから文末までの部分文字列の先頭が、指定された文字列集合 の要素のいずれかと一致するかどうかを判定する。
一致した場合はその文字列を返し、一致する文字列が存在しなかった場合はヌル を返す。

パラメータ:
seqs - 文字列集合。
戻り値:
一致した文字列。
例外:
java.lang.AssertionError - 引数がヌルの場合、又は文字列集合の中にヌル又は 空文字列が含まれている場合(デバッグ・モードのみ)。

contains

public boolean contains(java.lang.String searched)
現在のインデックスから文末までの部分文字列に、探索文字列が含まれているか どうかを判定する。

パラメータ:
searched - 探索文字列。
戻り値:
探索文字列が含まれている場合はtrueを返す。
例外:
java.lang.AssertionError - 引数がヌルの場合(デバッグ・モードのみ)。

nextUntil

public StringSequence nextUntil(java.lang.String searched)
指定された探索文字列が見つかるまで、インデックスを次に進める。
探索文字列が見つからなかった場合は、インデックスの値がn(=コード・ ポイント単位の文字列長)になる。

パラメータ:
searched - 探索文字列。
戻り値:
インデックスを移動した後のこのオブジェクト。
例外:
java.lang.AssertionError - 引数がヌルの場合(デバッグ・モードのみ)。

skipWhitespaces

public StringSequence skipWhitespaces()
空白でない文字が現れるまで、インデックスを次に進める。
移動後のインデックスは、スキップを開始してから最初に現れた空白でない文字 を指している。
文字列の最後まで空白文字が続く場合は、インデックスの値がn(=コード・ ポイント単位の文字列長)になる。

戻り値:
インデックスを移動した後のこのオブジェクト。


Copyright (C) SATOH Takayuki All Rights Reserved.