【问题标题】:How to escape delimiter while tokenizing string in java如何在java中标记字符串时转义分隔符
【发布时间】:2018-11-12 10:20:02
【问题描述】:

我有一个像"(\\d{4},\\d{2},\\d{2} :\\d{2}:\\d{2}:\\d{2})" 这样的正则表达式模式 我将此模式作为参数传递给基于"," 标记输入字符串的函数。

例子:

func((\\d{4},\\d{2},\\d{2} :\\d{2}:\\d{2}:\\d{2}),func(n))";

如何在标记化时转义正则表达式中的逗号?

【问题讨论】:

  • 将正则表达式作为字符串传递。在两边使用双引号
  • 您可以编辑您的问题以详细说明您的问题吗?目前尚不清楚您的要求是什么。还包括您拥有的完整源代码、您尝试执行的操作以及失败的原因。

标签: java


【解决方案1】:

能否请您发布对字符串进行标记的函数?那么可以帮助您的代码。

如果没有此类信息,您可以使用 split() 如下(如果您只想在“,”上进行拆分):

String s = "Messages,Hello\,World,Hobbies,Java\,Programming";
System.out.println(Arrays.toString(s.split("(?<!\\\\),")));

参考 - http://www.javacreed.com/how-to-split-a-string-with-escaped-delimiters/

您可以将代码替换为:

String str = "(\\d{4}\\,\\d{2}\\,\\d{2} \\d{2}:\\d{2}:\\d{2}), func(a)";
String[] tokens = str.split("(?<!\\\\),");
System.out.println(Arrays.toString(tokens));

这将为您提供一个在“,”上分割的标记字符串数组

【讨论】:

  • String str = "(\\d{4}\\,\\d{2}\\,\\d{2} \\d{2}:\\d{2} :\\d{2}), 函数(a)"; StringTokenizer stra = new StringTokenizer(str, ",");
  • 为什么不使用 split 来做同样的事情?推荐使用拆分或正则表达式。 StringTokenizer 是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。建议任何寻求此功能的人改用 String 的 split 方法或 java.util.regex 包。 docs.oracle.com/javase/7/docs/api/java/util/…
  • 谢谢@Derryl Thomas 的回答。正如您建议的使用拆分功能而不是字符串标记器解决了这个问题。
【解决方案2】:

@Derryl Thomas 的答案可能是正确的答案。 这是另一种技术。

  1. 在正则表达式中使用其他内容来表示逗号。
  2. 以逗号分隔。
  3. 将“其他”改回逗号。

例如:

  1. 而不是"(\\d{4},\\d{2},\\d{2} :\\d{2}:\\d{2}:\\d{2})"
    使用"(\\d{4}boppity\\d{2}boppity\\d{2} :\\d{2}:\\d{2}:\\d{2})"
  2. 根据逗号进行拆分。
  3. 将正则表达式中的“boppity”更改为“,”;也许是这样的:
    newStringVariable = yourStringVariable.replace("boppity", ",")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多