用空格分割功能问题

时间:2014-11-26 14:07:07

标签: java split

我想用特殊字符分隔字符串,例如:

String s = ",?hello=glu()Stop/<><$#!gluglufazoperu";

我使用split函数来获取普通字符:

hello
glu
Stop
gluglufazoperu

我有一个问题,当我使用split时,它会在字符串数组的开头放置空格,有谁知道如何删除它?

这是我的代码示例:

public class Main {
    public static void main(String[] args) {
        String s = ",?hello=glu()Stop/<><$#!gluglufazoperu";
        String f[] = s.split("[^\\w \\s]+");
        int i= 0;

        while(i < f.length){
            System.out.println(f[i]);
            i++;
        }
    }
}

这是输出:     (空白)     你好     谷氨酸     停止     gluglufazoperu

3 个答案:

答案 0 :(得分:1)

有一个空格,因为','和'?'之间的第一个分割返回一个空字符串“”。 使用while循环可以打印System.out.println(“”),这是一个空行。

如果您只想打印非空字符串,则应使用

替换System.out.println
if(!"".equals(f[i])){
System.out.println(f[i]);
}

并且(在您的问题旁边)一点提示,请看一下本教程。

oracle for loop tutorial

答案 1 :(得分:0)

不是空格而是空字符串为“,?”也是一个分隔符。这也可能发生在最后。

您可以简单地跳过一个空字符串。 你可能会从数组中删除那些代价很高的代码,因为它会复制。

if (f.length > 1) {
    if (f[0].isEnpty()) {
        f = Arrays.copyOfRange(f, 1, f.length);
    }
    if (f.length > 1) {
        if (f[f.length - 1].isEnpty()) {
            f = Arrays.copyOfRange(f, 0, f.length - 1);
        }
    }
}

说明:

  • String[] f = ...在java中比较常规。
  • \\s已经占据了空间,你真的想留空间吗?

答案 2 :(得分:0)

在拆分之前,您可以简单地将匹配正则表达式的字符串的最长前缀替换为空字符串:

final String regex = "[^\\w \\s]+";
String f[] = s.replaceAll("^"+regex, "")
              .split(regex);