在java中按字符串拆分字符串

Cas*_*per 13 java regex string split

我从网上得到一个字符串,如下所示:

Latest Episode@04x22^Killing Your Number^May/15/2009
Run Code Online (Sandbox Code Playgroud)

然后我需要存储04x22,Killing Your NumberMay/15/2009在不同的变量,但它将无法工作.

String[] all = inputLine.split("@");
String[] need = all[1].split("^");
show.setNextNr(need[0]);
show.setNextTitle(need[1]);
show.setNextDate(need[2]);
Run Code Online (Sandbox Code Playgroud)

现在它只存储NextNr整个字符串

04x22^Killing Your Number^May/15/2009
Run Code Online (Sandbox Code Playgroud)

怎么了?

Bri*_*ach 32

String.split(String regex)

论证是一种规范的表达,^在那里具有特殊的意义; "锚定到开始"

你需要这样做:

String[] need = all[1].split("\\^");

通过逃避^你说"我的意思是字符'^'"

  • 经常(或者说......总是),暗示有人在他们的项目中包含了一个巨大的依赖关系,这种依赖会削减你实际上并不关心的几纳秒并且不会对一个人产生影响......不是非常好的建议.另见:过早优化. (8认同)
  • 分裂正则表达式是最慢的.看看Guava的Splitter课程. (3认同)

Pet*_*rey 22

如果您有分隔符但不知道它是否包含特殊字符,则可以使用以下方法

String[] parts = Pattern.compile(separator, Pattern.LITERAL).split(text);
Run Code Online (Sandbox Code Playgroud)


Ago*_*ath 7

使用番石榴,你可以优雅而快速地做到:

private static final Splitter RECORD_SPLITTER = Splitter.on(CharMatcher.anyOf("@^")).trimResults().omitEmptyStrings();

...

Iterator<String> splitLine = Iterables.skip(RECORD_SPLITTER.split(inputLine), 1).iterator();

show.setNextNr(splitLine.next());
show.setNextTitle(splitLine.next());
show.setNextDate(splitLine.next());
Run Code Online (Sandbox Code Playgroud)