Use String.split() with multiple delimiters
我需要基于定界符-和.拆分字符串。 以下是我想要的输出。
AA.BB-CC-DD.zip->
但是我的以下代码不起作用。
1 2 3
| private void getId (String pdfName ){
String[]tokens = pdfName. split("-\\\\.");
} |
-
根据您所说的,看来一切正常。 您想要的输出是什么?
-
@Jeff:他显示了所需的输出(AA / BB / CC ...)
-
你确定吗? 我将其解释为他当前的输出,而不是他期望的输出。 也许是时候站起来四处走走了。
-
@Jeff:抱歉让我感到困惑,我更新了我的帖子以消除您的误解。
-
正则表达式会降低您的性能。 我建议写一个方法,如果需要的话,将一个字符一个字符地分割字符串。 您可以进一步优化以获得log(n)性能。
我认为您需要包括正则表达式OR运算符:
1
| String[]tokens = pdfName. split("-|\\\\."); |
您将拥有的搭配:
[DASH后跟DOT一起] -.
不
[其中的DASH或DOT] -或.
-
为什么我们需要两个反斜线?
-
正则表达式中的.字符表示换行符以外的任何字符。 tutorialspoint.com/java/java_regular_expressions.htm但是,在这种情况下,他们需要实际的字符.。两个反斜杠表示您正在引用.。反斜杠是转义字符。
-
在正常情况下,它是.split("match1|match2")(例如split("https|http")),\\是在上述情况下转义特殊字符.
-
或者通常,您可以使用pdfName.split("\\\\W");如下所示@Peter Knego答案
-
使用[-.]代替-|\\\\.
试试这个正则表达式"[-.]+"。 +之后将连续的定界符char视为1。如果您不希望这样做,请删除加号。
-
@Lurkers:Peter不必逃避-的唯一原因是它在[]内的第一个想法,否则它前面必须有一个反斜杠(当然,前面也要有一个反斜杠)其中,我们需要两个,因为这是字符串文字)。
-
我认为这个答案比公认的答案更好,因为当您使用逻辑运算符|时,问题是您的定界符之一可能成为结果标记的一部分。 Peter Knegos [-。] +不会发生这种情况
您可以使用正则表达式" \ W"。它与任何非单词字符匹配。所需行为:
1
| String[] tokens =pdfName. split("\\\\W"); |
-
它对我不起作用`String s =" id(INT),name(STRING),"。在此处使用\\ W创建一个长度为6的数组,该数组应仅为4
-
当输入包含Unicode字符时,这也会中断。最好只包含实际的定界符,而不要使用\\W完全"抓住"。
使用番石榴,您可以这样做:
1
| Iterable<String> tokens = Splitter.on(CharMatcher.anyOf("-.")).split(pdfName); |
您提供的字符串split是正则表达式的字符串形式,因此:
1 2 3
| private void getId (String pdfName ){
String[]tokens = pdfName. split("[\\\\-.]");
} |
这意味着要分割[]中的任何字符(我们必须使用反斜杠对-进行转义,因为在[]中它是特殊的;当然,我们必须对反斜杠进行转义,因为这是一个字符串)。 (相反,.通常是特殊的,但在[]内部不是特殊的。)
-
在这种情况下,您不需要转义连字符,因为[-.]可能无法解释为范围。
-
@Alan:因为这是类上的第一件事,那就是事实。但是我总是这样做,它太容易了,以后再回去不加思索就在它前面添加一些内容。转义不需任何费用,所以...
-
你知道如何逃脱括号吗?我有要拆分为" 200","工程"的字符串" [200]工程"
-
哦,我明白了……我必须使用两个反斜杠而不是一个。 String[] strings = codes.get(x).split("\\\\[|\\\\]|"); <-有兴趣的人的代码
对于两个字符序列作为分隔符" AND"和" OR",应进行此操作。使用时不要忘记修剪。
1 2
| String text ="ISTANBUL AND NEW YORK AND PARIS OR TOKYO AND MOSCOW";
String[] cities = text. split("AND|OR"); |
结果:城市= {"伊斯坦布尔","纽约","巴黎","东京","莫斯科"}
-
如何获得{{ISTANBUL AND"," NEW YORK AND"," PARIS OR"," TOKYO AND","莫斯科"}之类的输出
1
| String[] token =s. split("[.-]"); |
-
请通过添加一些解释来补充纯代码答案,以帮助消除对StackOverflow是一项免费代码编写服务的误解。
我会使用Apache Commons:
导入org.apache.commons.lang3.StringUtils;
1 2 3
| private void getId (String pdfName ){
String[] tokens = StringUtils. split(pdfName, "-.");
} |
它会在任何指定的分隔符上进行分割,而StringUtils.splitByWholeSeparator(str, separator)则使用完整的字符串作为分隔符
最好使用这样的东西:
1
| s.split("[\\\\s\\\\-\\\\.\\\'\\\\?\\\\,\\\\_\\\\@]+"); |
添加了其他一些字符作为示例。这是最安全的使用方式,因为已处理.和'的方式。
试试这个代码:
1 2
| var string = 'AA.BB-CC-DD.zip';
array = string.split(/[,.]/); |
-
请通过添加一些解释来补充纯代码答案,以帮助消除对StackOverflow是一项免费代码编写服务的误解。
您也可以在split()方法中将正则表达式指定为参数..请参见以下示例...。
1 2 3
| private void getId (String pdfName ){
String[]tokens = pdfName. split("-|\\\\.");
} |
1
| s.trim().split("[\\\\W]+") |
应该管用。
-
首先,不,它不起作用-也许您可以在发布之前尝试一下?然后,此答案与您的答案相同-但有效。最后,您应该检查格式(应该可以)。
-
请通过添加一些解释来补充纯代码答案,以帮助消除对StackOverflow是一项免费代码编写服务的误解。
如果您知道字符串将始终采用相同的格式,请首先基于.拆分字符串,然后将字符串存储在变量的第一个索引中。然后根据-在第二个索引中拆分字符串,并存储索引0、1和2。最后,根据.拆分上一个数组的索引2,您应该已经获得了所有相关字段。
请参考以下代码段:
1 2 3 4 5
| String[] tmp = pdfName. split(".");
String val1 = tmp [0];
tmp = tmp [1]. split("-");
String val2 = tmp [0];
... |
-
它可以一步完成,因此只需一步。查看其他回复。
-
pdfName.split(".")导致长度为零的数组。
-
1).需要转义为\\\\.