将String.split()与多个分隔符一起使用

Tha*_*ham 188 java regex

我需要拆分的分隔符串基地-..以下是我想要的输出.

AA.BB-CC-DD.zip - >

AA
BB
CC
DD
zip 
Run Code Online (Sandbox Code Playgroud)

但我的以下代码不起作用.

private void getId(String pdfName){
    String[]tokens = pdfName.split("-\\.");
}
Run Code Online (Sandbox Code Playgroud)

Ric*_*d H 296

我认为你需要包含正则表达式OR运算符:

String[]tokens = pdfName.split("-|\\.");
Run Code Online (Sandbox Code Playgroud)

你拥有的将匹配" - ." 不是" - " "."

  • 为什么我们需要两个反斜杠? (9认同)
  • 正则表达式中的`.`字符表示除新行之外的任何字符.http://www.tutorialspoint.com/java/java_regular_expressions.htm然而,在这种情况下,他们想要实际的字符`.`.两个反斜杠表示你指的是`.`.反斜杠是一个转义字符. (7认同)
  • 使用“[-.]”代替“-|\\.” (3认同)
  • 在正常情况下,它是`.split(“ match1 | match2”)`(例如`split(“ https | http”)`),\\是在上述情况下转义特殊字符`.`。 (2认同)

Pet*_*ego 48

试试这个正则表达式"[-.]+".+ after将连续的分隔符字符视为一个.如果您不想要,请删除加号.

  • @Lurkers:彼得没有必要逃避`-`的唯一原因是它首先在`[]`里面思考,否则就需要在它前面有一个反斜杠(当然,到了在它前面放一个反斜杠,我们需要*two*因为这是一个字符串文字). (8认同)
  • 我认为这个答案比公认的要好,因为当您使用逻辑运算符 | 时,问题在于您的分隔符之一可能是结果“标记”的一部分。这不会发生在 Peter Knego 的 [-.]+ (2认同)

小智 26

您可以使用正则表达式"\ W".这匹配任何非单词字符.所需的行将是:

String[] tokens=pdfName.split("\\W");
Run Code Online (Sandbox Code Playgroud)

  • 当输入包含Unicode字符时,这也会中断.最好只包含实际的分隔符,而不是"全部"和"\ W`". (2认同)

Col*_*inD 12

使用Guava你可以这样做:

Iterable<String> tokens = Splitter.on(CharMatcher.anyOf("-.")).split(pdfName);
Run Code Online (Sandbox Code Playgroud)


T.J*_*der 11

您提供split的字符串是正则表达式的字符串形式,因此:

private void getId(String pdfName){
    String[]tokens = pdfName.split("[\\-.]");
}
Run Code Online (Sandbox Code Playgroud)

这意味着要拆分[](我们必须-用反斜杠转义,因为它在内部是特殊的[];当然我们必须转义反斜杠,因为这是一个字符串).(相反,.通常是特殊的,但内部并不特别[].)

  • 哇,我明白了......我不得不使用两个反斜杠而不是一个反斜杠.`String [] strings = codes.get(x).split("\\ [| \\] |");`< - 任何有兴趣的人的代码 (3认同)

ÖME*_*ŞCI 6

对于作为分隔符“AND”和“OR”的两个字符序列,这应该起作用。使用时不要忘记修剪。

 String text ="ISTANBUL AND NEW YORK AND PARIS OR TOKYO AND MOSCOW";
 String[] cities = text.split("AND|OR"); 
Run Code Online (Sandbox Code Playgroud)

结果:城市 = {“伊斯坦布尔”、“纽约”、“巴黎”、“东京”、“莫斯科”}


Try*_*ing 6

pdfName.split("[.-]+");

  • [.-].->或中的任何一个都-可以用作分隔符

  • +符号表示如果上述分隔符连续出现,我们应该将其视为一个。