【问题标题】:Cleaning quotes in a string清除字符串中的引号
【发布时间】:2013-10-24 23:02:51
【问题描述】:

我有一个字符串:

“非常”“好”“标题”

我需要让它看起来像这样:

非常“好”的标题

我该怎么做?

很抱歉没有描述。这是发生了什么: 我有一个文件,其中行如下:

"Very ""Good"" title" 21 1231 1111 [zcz]

我需要分成

"Very ""Good"" title"
21
1231
1111 
[zcz]

然后,"Very ""Good"" title" 替换为 Very "Good"" title

【问题讨论】:

  • 您的意思是删除前 2 个和后 2 个 " 吗?
  • 请更准确地描述您的需求。是否要删除单个 " 字符并用单个字符替换双 " 字符?
  • 向我们展示您当前尝试执行此操作的代码,否则它是题外话
  • 您必须更准确地了解现有的确切规则。您如何确定必须删除哪些引号?

标签: java regex string replace


【解决方案1】:

使用带有negative lookahead 的正则表达式怎么样?具体来说:"(?!").

String s = "\"Very \"\"Good\"\" title\"";

System.out.println(s.replaceAll("\"(?!\")", ""));
非常“好”的标题

我在这里假设您想用 n-1 个引号替换每次运行的 n 个引号,这相当于删除此类运行中的最后一个引号。这正是我们使用这个正则表达式所做的;我们正在匹配并删除所有没有跟在另一个引号后面的引号:

Debuggex Demo

【讨论】:

  • 很好的方法,但是,似乎如果有一个像Hello """"World"""" ! 这样的字符串,而不是产生Hello ""World"" !,这个方法会产生Hello """World""" !(因为每个@987654330 中只有最后一个" @ 序列被替换。(嗯......我不确定它是否真的是 OP 想要的......)
【解决方案2】:
String s = "Very \"Good\" title";
System.out.println(s);

结果 = 非常“好”的标题

【讨论】:

    【解决方案3】:

    获取可以处理 Microsoft Excel 工作表的良好 CSV 解析器。解析器将为您完成工作,您可以专注于真正的任务。

    或者,如果数据来自其他来源,请为该格式获取预构建的解析器。肯定有人写过。不要做别人已经成功完成的工作。

    【讨论】:

    • 这有什么帮助?
    • @cYn 这看起来像 CSV 文件的一行(带有字段 seperaqtor=" ")。 CSV 解析器应该能够一次性将此字符串解析为单独的字段。
    • 但是你告诉他在彩弹射击场使用 M2 机枪。杀完了。就像 arshajii 的答案一样,有一些简单的方法可以解决它。他必须首先找到一个 CSV 解析器,将其集成到他的环境中,然后阅读有关如何替换/忽略字符的文档。
    • @cYn 我不认为它是解决这个问题的机枪:虽然“引用清理”似乎是一项微不足道的任务,而 arshajii 的方法大多有效,但字符串的初始拆分会导致很多的麻烦。 OP 不能使用空格作为分隔符来执行String.split(),因为字符串中有空格。使用 CVS 解析器实际上是正确处理此类文件格式的好主意
    • 我确实看到了这里提到的所有要点。但是如果一个人问一个简单的问题来做一个简单的任务,建议他找到需要文档的解析器不会有太大帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2015-02-23
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    相关资源
    最近更新 更多