Java/clojure : Multiple character delimiter, 并保留分隔符

标签 java string clojure split tokenize

我正在用 clojure 开发一个项目,它可以与任何 java 类互操作,所以我的问题的答案可能是 java 或 clojure。

基本上,我需要能够根据给定的分隔符(多于一个字符)将字符串拆分成组件,但同时保留分隔符。

例如:

splitting "test:test:test" on ":"  => [ "test" ":" "test" ":" "test" ]
splitting "::test::test::" on "::" => [ "::" "test" "::" "test" "::" ]

我使用的壁橱是使用 clojure 的 clojure.string/split,但它实际上并不返回分隔符。第二个最接近的是使用 StringTokenizer,它确实返回分隔符但不接受多字符分隔符。

除了将字符串分解成一系列字符并对其运行奇怪的 reduce 之外,还有其他解决方案吗?

最佳答案

这是一个构建正则表达式以匹配定界符前后间隙的版本,而不是定界符字符串本身(假设 d 中没有正则表达式特殊字符):

=> (defn split-with-delim [s d]
     (clojure.string/split s (re-pattern (str "(?=" d ")|(?<=" d ")"))))
#'user/split-with-delim
=> (split-with-delim "test:test:test" ":")
["test" ":" "test" ":" "test"]
=> (split-with-delim "::test::test::" "::")
["" "::" "test" "::" "test" "::"]

关于Java/clojure : Multiple character delimiter, 并保留分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15286711/

相关文章:

java - java中的自定义线程调度

java - 在 JScrollPane 中调用 setViewportView 后避免自动滚动到底部

python - 热衷于剪切字符串中变化的文本吗?

clojure - 访问 Compojure 查询字符串

macros - 为什么这个 clojure 函数没有执行?

java - Spring Data JPA 之间 findBy/findAllBy 的区别

java - 代码模型 : how to check if I need to generate a generic type?

string - 如何将空字符串插入 Microsoft Power Automate 中流程操作的字段中

java - 为什么正则表达式 =""(空模式)在每个字符位置都匹配?

java - 创建一个用于从 Java/Clojure 执行的 jar 文件