我需要计算我的字符串中的空格数,但是当我运行它时,我的代码给了我一个错误的数字,出了什么问题?
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)
您也可以使用流:
int spaces = s.chars().filter(c -> c == (int)' ').count();
Run Code Online (Sandbox Code Playgroud)
最快的方法是:
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。
\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)
| 归档时间: |
|
| 查看次数: |
100163 次 |
| 最近记录: |