2011-05-10 56 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

你得到了正確的輸出。但也許這不是你所期望的。試着詳細說明。從我所看到的,你試圖匹配一個斜線後跟一個或多個撇號。 – Ingo 2011-05-10 10:37:28

+0

ahaneo,你能給我們你想要返回的字符串嗎? – Martijn 2011-05-10 10:42:37

+0

@Martijn我用我期待的輸出更新了這個問題 – ahaneo 2011-05-10 10:48:20

回答

6

我只想用

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

如果你有兩個連續的單引號,你可能想用一個

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

來取代它們,您可能希望將整個字符串放置在雙引號,如果有是一個單引號與

public static String quote(String text) { 
    if (text.contains("\"") 
     return '"' + text.replaceAll("\"", "\"\"") + '"'; 
    if (text.contains(",") || text.contains("'")) 
     return '"' + text + '"'; 
    return text; 
} 

其更加整潔地將雙引號放在整個f像Excel一樣。

+0

那麼我的csv的最終消費者不能處理字符串中的單引號,因此我試圖包裝兩個雙引號之間的單引號,包含方法會更多有效的正則表達式,爲什麼我問這是因爲我的輸入csv包含超過100列和數千行所有這些記錄需要通過上述方法進行驗證 – ahaneo 2011-05-10 10:49:14

+1

在這種情況下:'return inputStr.replaceAll( 「'」,「\」'\「」);' – 2011-05-10 11:15:18

+0

哦,是的,我不會擔心太多的表現,除非程序真的太慢了​​。 – 2011-05-10 11:16:37

2

您需要刪除該斜槓。現在您正在搜索一個/,然後是一個或多個單引號。

另外,matches()檢查整個字符串,而不是find()

...我寫了下面的正則表達式匹配的單引號的不止一個比賽......

'+一個單引號匹配和正則表達式。要匹配多個報價,請使用''+或等效的'{2,}

但是,如果您只想找到兩個單引號,我會選擇彼得的建議。我會留下我的回答,因爲它解釋了爲什麼你的matches()失敗。

+0

Pattern pattern = Pattern.compile(「'+」);當與matches()方法一起使用時返回false,但使用find()方法返回true我想知道爲什麼區別 – ahaneo 2011-05-10 11:12:42

+0

Quote:'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。html#find())「_ – 2011-05-10 11:33:07

+0

感謝@Bart的解釋 – ahaneo 2011-05-10 15:49:18

相關問題