最初,我只是试图将字符串中的字符获取。我使用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);
}
}
我只是想计算没有空格的字符并使用更多循环。
答案 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
调用,因为它没有执行任何操作。