首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止字符串拆分上的空值

防止字符串拆分上的空值
EN

Stack Overflow用户
提问于 2018-05-26 21:06:52
回答 6查看 245关注 0票数 1

我在包含+-和\\的字符串上使用了拆分方法,我不想得到那个空值,下面是我的代码

代码语言:javascript
复制
public class Test {

   public static void main(String args[]) {

     String ab="+computer-science|lambda+sigma";
     String[] lesAndz = ab.split("[\\W]");
     for(int i=0;i<lesAndz.length;i++){
                    System.out.println(i+" : ["+lesAndz[i]+"]");

      }

}

}

我要它输出

代码语言:javascript
复制
0 : [computer]
1 : [science]
2 : [lambda]
3 : [sigma]

但是我得到了

代码语言:javascript
复制
0 : []
1 : [computer]
2 : [science]
3 : [lambda]
4 : [sigma]

我试过

代码语言:javascript
复制
String[] lesAndz = ab.split("[\\W]", -1);

但却没有用

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-05-26 21:23:43

我会用空格代替分隔字符。然后,可以在拆分之前使用trim()删除两端的任何额外字符。我假设结果中不需要任何空字符串,所以我稍微修改了表达式。

代码语言:javascript
复制
ab.replaceAll("\\W+", " ").trim().split(" ")
票数 0
EN

Stack Overflow用户

发布于 2018-05-26 21:15:39

您可以使用子字符串切断第一个字符:

代码语言:javascript
复制
String ab = "+computer-science|lambda+sigma";
String[] lesAndz;
if(Character.toString(ab.charAt(0)).matches("[\\W]")) {
    lesAndz = ab.substring(1,ab.length()).split("[\\W]");
} else {
    lesAndz = ab.split("[\\W]");
}
for(int i=0;i<lesAndz.length;i++){
    System.out.println(i+" : ["+lesAndz[i]+"]");
}

输出:

代码语言:javascript
复制
0 : [computer]
1 : [science]
2 : [lambda]
3 : [sigma]

这两种方法都适用,字符串以alpha-数值开始,字符串以非alpha-数字字符开头,例如:

  • +computer-science|lambda+sigma
  • computer-science|lambda+sigma
票数 0
EN

Stack Overflow用户

发布于 2018-05-26 21:20:38

根据Java,https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)

将不包括尾随空字符串,但前面的空字符串将包含空字符串。您只需再做一次检查,看看前面的字符串是否为空,并将其从列表中删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50547009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档