Java 搜索字符串中的单引号并用其他字符将其换行
我正在尝试解析csv文件,并在 这个过程遇到了一些问题 包含单引号的条目。我已经编写了以下正则表达式来匹配多个单引号的匹配,如果该方法返回true,我计划将其包装为另一组字符 然而,我没有得到正确的答案 输出 下面是伪代码:Java 搜索字符串中的单引号并用其他字符将其换行,java,regex,Java,Regex,我正在尝试解析csv文件,并在 这个过程遇到了一些问题 包含单引号的条目。我已经编写了以下正则表达式来匹配多个单引号的匹配,如果该方法返回true,我计划将其包装为另一组字符 然而,我没有得到正确的答案 输出 下面是伪代码: public boolean containsChar() { String inputStr= "Niel O' Brian"; Pattern pattern = Pattern.compile("/'+");
public boolean containsChar()
{
String inputStr= "Niel O' Brian";
Pattern pattern = Pattern.compile("/'+");
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
return matchFound;
}
你需要删除正斜杠。现在您正在搜索一个
/
,后跟一个或多个单引号
另外,matches()
检查整个字符串,您希望改为find()
。。。我已经编写了以下正则表达式来匹配多个单引号匹配
regex'+
也匹配一个引号。要匹配多个引号,请使用'+
或等效的'{2,}
但如果你只想找到两个单引号,我会同意彼得的建议。我将留下我的答案,因为它解释了您的匹配()失败的原因。我只想使用
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;
}
像Excel一样在整个字段周围加上双引号要整洁得多。您可以得到正确的输出。但也许这不是你所期望的。试着详细说明一下。据我所见,你试图匹配一个斜杠,后跟一个或多个撇号。阿哈尼奥,你能给我们你想要返回的字符串吗?@Martijn我用我的输出更新了这个问题expecting@ahaneo:在哪里?我仍然无法看到您期望作为输出的字符串。你能给Niel O’Brian举个例子吗?他想得到真实的返回-但是,他想要正确的答案,这是错误的。我的csv最终消费者无法处理字符串中的单引号,因此我试图将单引号括在两个双引号之间,contains方法是否比regexp更有效,我之所以问这个问题,是因为我的输入csv包含100多列和数千行,所有这些记录都需要通过上述方法进行验证代码>哦,是的,除非程序真的太慢,否则我不会太担心性能。@ahaneo,请看我添加的如何格式化写入CSV的单元格。Pattern=Pattern.compile(“+”);当与matches()方法一起使用时返回false,而与find()方法一起使用时返回true我想知道为什么会出现这种差异引号:matches()
:“”和find()
:“”谢谢@Bart的解释