2011-07-15 18 views
1

ArrayStringsで、バッファ文字列から分割されています。配列の各項目には{value, offset, count, & hash}があります。配列内のアイテムのオフセットを取得するにはどうすればよいですか?文字列のオフセットを取得する

例:

String buffer = aVeryLongString; 
String[] splitStringArray = buffer.split(regex); 

for(String s: splitStringArray) { 
    // Get the offset of each item 
    // Do something 
} 
+0

もう一度分割したいかもしれませんか? – Waldheinz

+0

各要素の値、オフセット、カウント、&ハッシュを分割する別の区切りが必要です。 – ascanio

答えて

2
String buffer = aVeryLongString; 
String[] splitStringArray = buffer.split(regex); 

int offset = -1; 
for(String s: splitStringArray) { 
    offset = buffer.indexOf(s, offset + 1); // avoid duplicates 
    System.out.println(offset); 
} 

String.indexOf(String str, int offset)を使用すると、文字列のオフセットを見つけることができます。指定されたオフセットで文字列の検索を開始します。したがって、前の文字列のオフセットを使用すると、重複の問題が解決されます。

+0

助けてくれてありがとう! –

2

String.indexOf(文字列str)が動作する必要があります。

for(String s: splitStringArray) { 
    System.out.println(buffer.indexOf(s)); 
} 
+2

重複がない場合にのみ機能します。 – Kal

+1

ええ、それは文字列の最初のインスタンスを取得します。 –

+0

助けてくれてありがとう! –

2

String.split関数の代わりに正規表現のMatcher/Patternクラスを使用することができます。 Matcherクラスを使用すると、find()との一致を繰り返し、end()を介して現在の位置を取得できます。

+0

私は正規表現を含まないように私のコードを実際に書き直しています。その力から決定される。 ;) –

+0

しかし、String.split(正規表現)は、フードの中でパターンを使用しています! – pauli

+0

私は知っている、私は知っている... haha​​ –

0

String.split()は、この情報を復元する方法を実際に提供していません(配列をループして前の長さを追加することなく)。結果の部分文字列についてこのような追加情報が必要な場合は、java.util.Scannerを試してみてください。

他のポスターの1つとして、java.util.regexクラスのPatternとMatcherを使用してください。

0

正規表現が常に固定長と一致する場合、オフセットは先行文字列の長さと分割文字列の長さの合計になります。

しかし、正規表現の長さが固定されていない場合...簡単には問題ではありません。基本的には分割を使って断片を見つけるロジックを繰り返さなければならないと思います。

+0

はい、正規表現が一致する文字列の長さは、さまざまな可能性のあるパラメータを取得しているので可変長になります。すなわちHTML/CSSカラーコード。 –

0

と言って、bufferを空白文字で分割したいとします。 (\S+は空白以外の文字を表します)

String buffer = aVeryLongString; 
Pattern p = Pattern.compile("\\S+"); 
Matcher m = p.matcher(buffer); 

while(m.find()) { 
    String matchStr = m.group(); 
    int startOffset = m.start(); 
    int endOffset = m.end(); 
    System.out.println("[ " + matchStr + " " + Integer.toString(startOffset) + " " + Integer.toString(endOffset) + " ]"); 
} 
関連する問題