【问题标题】:How to split a string in java with a specified delimiter while ignoring /? [duplicate]java - 如何在忽略/的同时使用指定的分隔符分割字符串? [复制]
【发布时间】:2015-06-06 22:45:44
【问题描述】:

我尝试阅读有关正则表达式和转义的信息,但没有运气。

我有一个如下所示的字符串:

String s = "4/18/2015|Planned|Linux|Maintenance";

我想用分隔符'|'分割它:

String[] tokens = s.split("|");

我期望的正确结果是

tokens[0] is "4/18/2015", 
tokens[1] is "Planned", 
tokens[2] is "Linux", 
token[3] is "Maintenance", 

但它给了我一些像这样的奇怪结果:

tokens[0] is null
tokens[1] is 4
tokens[2] is /
and tokens[3] is 1

我猜这是因为日期中的斜杠“/”就是原因。我尝试搜索许多现有问题并尝试了建议的方法,但无济于事。

【问题讨论】:

  • 什么是“奇怪的结果”?
  • Please help me and I will upvote the right answers and accept the best. 这很明显,也是意料之中的 :)
  • 看看这个,ideone.com/qZcIFF

标签: java arrays regex string split


【解决方案1】:

@mushfek0001 got it right.

大多数正则表达式方言中的管道是交替的元字符;基本上你要求正则表达式引擎在这里做的是:“拆分空字符串或......空字符串”。

而且,呃,这意味着你每次都可能会变空,除了正则表达式引擎不是傻瓜,如果在拆分中检测到空匹配,引擎将在再次拆分之前提前一个字符......因此你的结果(不知道为什么第一个元素是 null 而不是空字符串)。

因此,您应该与"\\|" 分开,而不是"|"

此外,如果您反复这样做,请改用Pattern

private static final Pattern PIPE = Pattern.compile("\\|");

// ...

final String[] tokens = PIPE.split(yourInput);

【讨论】:

  • 这是一些不错的信息!!!!!!!!!!
  • 感谢 fge!它有很大帮助!我应该接受你的,但 mushfek0001 早点来解决我的问题。非常感谢你,我赞成你的回答。
【解决方案2】:

随便用

split("\\x7C")

split("\\|")

在对管道字符“|”进行拆分时,您需要转义或使用相应的 unicode 值。

【讨论】:

  • 我尝试了你之前的建议 split("\\|") 并且成功了。我需要接受你的回答,但它不允许我这样做,它有 10 分钟的限制。我稍后会接受你的回答。
  • 这里所说的“十六进制码”就是unicode码点;请注意,这仅在 Java 7 之后可用!
  • 感谢信息人。进行了编辑。
【解决方案3】:

转义管道字符:

s.split("\\|");

因为正则表达式中的管道符号表示 OR,所以要转义它,您需要 \|,但在正则表达式中,您也需要转义 \,因此 \\| 将起作用。

或者按照 mushfek0001 的建议:

split("\\x7C")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2011-09-12
    • 2011-05-23
    • 2012-03-28
    • 2020-07-04
    • 2012-05-12
    相关资源
    最近更新 更多