如何摆脱此String []中的空格?

时间:2019-05-17 03:46:46

标签: java regex whitespace

最初,我只是试图将字符串中的字符获取。我使用split隔离字符来对它们进行计数。我有我的角色,但是我无法摆脱它在数组中打印的空格。

我尝试了在其他堆栈溢出帖子中看到的所有内容。

public class Test {

 public static void main(String[] args) {
    String str = "+d+=3=+s+";
    String[] alpha = str.split("[^a-z]");
    for(int i = 0; i < alpha.length; i++) {
      alpha[i] = alpha[i].replaceAll("\\s+", "");
         System.out.println(alpha[i]);
    }

       // System.out.println(alpha.length);
    }

}

我只是想计算没有空格的字符并使用更多循环。

2 个答案:

答案 0 :(得分:0)

这样做

public class Test {

    public static void main(String[] args) {
        String str = "+d+=3=+s+";
        System.out.println(str);

        str = str.replaceAll("[^a-zA-Z]", "");
        System.out.println(str);
        System.out.println("count "+str.length());
    }

}

输出将为

ds
count 2

输出不包含空格,因此您可以摆脱循环

答案 1 :(得分:0)

如果您在输出中引用的是空白行,则这些不是空格,它们是{{ 1}}数组。

由于正则表达式仅匹配单个字符,所以alpha操作将创建空条目,即 plain 拆分将产生以下数组:

split

由于默认情况下{ "", "d", "", "", "", "", "s", "" } 会删除结尾的空字符串,因此您实际得到的是:

split

如您所见,任何地方没有空格

您可以通过将{ "", "d", "", "", "", "", "s" } 更改为"[^a-z]"来删除大多数空字符串,因此多个连续的非字母将成为单个分隔符,这将为您提供:

"[^a-z]+"

要删除前导空字符串,请先从原始字符串中删除前导非字母:

{ "", "d", "s" }

这将为您提供:

String[] alpha = str.replaceFirst("[^a-z]+", "").split("[^a-z]+");

这当然会消除输出中的所有空白行:

{ "d", "s" }

您可以删除该d s 调用,因为它没有执行任何操作。