2011-05-10 5 views
1

私はcsvファイルを解析しようとしています。 には一重引用符を含む エントリがあります。しかし、私は正しい 出力以下文字列内の一重引用符を検索して他の文字で囲みます。

は擬似ですが届かないのですメソッドがtrueを返した場合、私は文字 の別のセットでそれをラップすることを計画しています、単一引用符の複数の一致を一致させるために、次の正規表現を私に書かれていますコード:

public boolean containsChar() 
    { 

     String inputStr= "Niel O' Brian"; 

      Pattern pattern = Pattern.compile("/'+"); 
      Matcher matcher = pattern.matcher(inputStr); 
      boolean matchFound = matcher.matches(); 

      return matchFound; 
    } 
+0

正しい出力が得られます。しかしおそらくそれはあなたが期待したものではありません。それについて詳しく説明してください。私が見るところでは、スラッシュに続いて1つ以上のアポストロフィをマッチさせようとします。 – Ingo

+0

ahaneo、返信したい文字列を教えてください。 – Martijn

+0

@Martijn私は期待している出力で質問を更新しました – ahaneo

答えて

6

私はちょうどあなたが二重引用符で文字列全体を配置することがあります2つの連続する単一引用符を持っている場合は、1

return inputStr.replaceAll("''", "'"); 

でそれらを交換することをお勧めします

String inputStr= "Niel O' Brian"; 
return inputStr.contains("'"); // same as your expression. 
return inputStr.contains("''"); // I suspect this is what you are looking for. 

を使用する場合があります一重引用符です。

fの全体を二重引用符で囲みます。 Excelのようにield。

+0

csvの私の最終消費者は文字列の一重引用符を扱うことができないので、二重引用符の間に一重引用符をラップしようとしています。効率的なregexpは、なぜ私がこれを聞いているのは、私の入力csvが100以上の列と何千もの行を含んでいるからです。これらすべてのレコードを上記の検証メソッドに渡す必要があります。 – ahaneo

+1

その場合:return inputStr.replaceAll "0122")、 "\" '\ "") "、" \ "' \" "); ' –

+0

プログラムが実際には遅すぎることが判明しない限り、パフォーマンスに関してあまり心配しません。 –

2

スラッシュを削除する必要があります。今すぐあなたは/の後に1つ以上の一重引用符を続けて検索しています。

また、matches()は文字列全体をチェックし、代わりにfind()が必要です。

...私は...だけでなく、単一引用符と一致する'+

正規表現を単一引用符の複数の一致と一致するには、次の正規表現を書かれています。複数の見積もりを一致させるには、''+またはそれと同等のものを使用してください。'{2,}

ただし、正確に2つの単一引用符を探したい場合は、Peterの提案に従ってください。あなたのmatches()が失敗する理由を説明するので、私は答えを残します。

+0

パターンパターン= Pattern.compile( "'+"); matches()メソッドで使用するとfalseを返しますが、find()メソッドでtrueを返します。なぜ違いがありますか? – ahaneo

+0

引用: 'matches()':_ "[パターンに対して領域全体を一致させようとする] http://download.oracle.com/javase/6/docs/api/java/util/regex/Matcher.html#matches())"_および 'find()':_ "[次のファイルを検索しようとしますパターンと一致する入力シーケンスのサブシーケンス。](http://download.oracle.com/javase/6/docs/api/java/util/regex/Matcher)。 –

+0

説明のための@Bart – ahaneo

関連する問題