如何计算java字符串中的空格?

kam*_*shi 17 java string

我需要计算我的字符串中的空格数,但是当我运行它时,我的代码给了我一个错误的数字,出了什么问题?

 int count=0;
    String arr[]=s.split("\t");
    OOPHelper.println("Number of spaces are: "+arr.length);
    count++;
Run Code Online (Sandbox Code Playgroud)

Ale*_*exR 31

s.length() - s.replaceAll(" ", "").length() 返回空格数.

有更多的方法.例如"

int spaceCount = 0;
for (char c : str.toCharArray()) {
    if (c == ' ') {
         spaceCount++;
    }
}
Run Code Online (Sandbox Code Playgroud)

等等

在您的情况下,您尝试使用\t-TAB 拆分字符串.如果您使用,您将获得正确的结果" ".使用\s可能会令人困惑,因为它匹配所有whitepsaces - 常规空间和TAB.


Boh*_*ian 19

这是一种不同的观察方式,它是一个简单的单行:

int spaces = s.replaceAll("[^ ]", "").length();
Run Code Online (Sandbox Code Playgroud)

这可以通过有效地删除所有非空格然后获取剩余的空间(空格)来实现.

您可能想要添加空检查:

int spaces = s == null ? 0 : s.replaceAll("[^ ]", "").length();
Run Code Online (Sandbox Code Playgroud)

Java 8更新

您也可以使用流:

int spaces = s.chars().filter(c -> c == (int)' ').count();
Run Code Online (Sandbox Code Playgroud)

  • 变量空间的类型应为long而不是int。 (2认同)

Kon*_*uda 6

最快的方法是:

int count = 0;
for(int i = 0; i < str.length(); i++) {
     if(Character.isWhitespace(str.charAt(i))) count++;
}
Run Code Online (Sandbox Code Playgroud)

这将捕获所有被视为空白的字符。

正则表达式解决方案需要编译正则表达式并执行它 - 有很多开销。获取字符数组需要分配。迭代字节数组会更快,但前提是您确定您的字符是 ASCII。


cho*_*ban 5

\t将匹配制表符,而不是空格,也应该用双斜线表示:\\t。你可以打电话,s.split( " " )但这不会计算连续的空格。我的意思是...

String bar = " ba jfjf jjj j   ";
String[] split = bar.split( " " );
System.out.println( split.length ); // Returns 5
Run Code Online (Sandbox Code Playgroud)

因此,尽管有七个空格字符,但只有五个空格。我猜这取决于你要数哪个。

Commons Lang是你的朋友。

int count = StringUtils.countMatches( inputString, " " );
Run Code Online (Sandbox Code Playgroud)


nik*_*500 2

您的代码将计算制表符的数量,而不是空格的数量。此外,选项卡的数量将比 少 1 arr.length