2012-03-27 6 views
1

ether indexOfまたはregex Patternを使用するときは、基本的に\ nを無視して検索をラップしようとしています。見つかったインデックスが間違っているので、すべての改行文字を削除できません。例えばhaystackで針を見つけてテキストの位置を保持するための改行を無視する

Matcher matcher = Pattern.compile("dog").matcher("cat\n do\ng cow"); 
matcher.find(); 
int start = matcher.start(); 
int end = matcher.end(); 
System.out.println("Start: "+start+" End: "+end); 

を出力する必要があります。私は、

Matcher matcher = Pattern.compile("dog").matcher("cat\n do\ng cow".replaceAll("\n","")); 

を改行を削除した場合

Start: 5 End: 9 

その後、インデックスがめちゃめちゃにされるだろう:

Start: 4 End: 7 

注:この例で使用したよりも複雑な正規表現を使用する予定です。

私はテキストエディタでfind関数を実装しており、 'ラップアラウンド'オプションを作成しようとしています。 アイデア

+1

あなたは無視してどういう意味ですか?インデックスが間違っているため削除できないと言いますが、indexOfを実行すると改行文字が数えられ、無視されません。希望の入力と出力を表示してください。 – Danny

+1

さらに、(コードを介して)何を試しているかを示して、人々があなたを解決策に導こうとするようにしてください。 –

答えて

2

を試してみてください。

String needle = "dog"; 
String regex = needle.replaceAll("(.(?!$))", "$1\n?"); // inserts line breaks 
// regex now becomes "d\n?o\n?g" 
Pattern p = Pattern.compile(regex); 
Matcher matcher = p.matcher("cat do\ng cow"); 
if (matcher.find()) { 
    int start = matcher.start(); 
    int end = matcher.end(); 
    System.out.println("Start: "+start+" End: "+end); 
} 
else 
    System.err.println("No match available"); 

OUTPUT:

Start: 4 End: 8 

ところで、あなたの期待出力5と9は、私には正しいようではありません。このコードを考えてみましょう。

+0

単純な文字列には適していますが、より複雑な正規表現検索はどうでしょうか?コードに誤字がありました。 – RedHatter

+0

より複雑な正規表現検索の例をいくつかご提供ください。私が理解しているように、間に改行文字を無視することで、干草草の針を探しています(少なくとも質問タイトルが言ったことです)。 – anubhava

0
myString.replaceAll("\n",""); 

あなたはちょっとスタック内で検索する前に検索キーワードを取り、すべての文字の後に、オプションの改行をinterjectingことによってそれを準備する必要があり、この1

+0

これは**改行を置き換え、文字列から完全に削除します。索引を壊してしまいます。 – RedHatter