Java 显示输入字符串中的空格数?
我正在尝试编写一个快速程序,计算输入字符串中的空格数。这就是我到目前为止所做的:Java 显示输入字符串中的空格数?,java,Java,我正在尝试编写一个快速程序,计算输入字符串中的空格数。这就是我到目前为止所做的: import java.util.Scanner; public class BlankCharacters { public static void main(String[] args) { System.out.println("Hello, type a sentence. I will then count the number of times you use
import java.util.Scanner;
public class BlankCharacters
{
public static void main(String[] args)
{
System.out.println("Hello, type a sentence. I will then count the number of times you use the SPACE bar.");
String s;
int i = 0;
int SpaceCount = 0;
Scanner keyboard = new Scanner(System.in);
s = keyboard.nextLine();
while (i != -1)
{
i = s.indexOf(" ");
s = s.replace(" ", "Z");
SpaceCount++;
}
System.out.println("There are " + SpaceCount + " spaces in your sentence.");
}
}
while循环首先使用s.indexOf(“”)查找字符串s中的第一个空格,将其替换为char Z,然后将值SpaceCount加1。此过程重复,直到s.indexOf没有找到空白,导致i为-1,从而停止循环
换句话说,每次发现空白时,SpaceCount都会增加1,然后向用户显示空白的总数。或者应该是
问题:空格计数不会增加,而是始终打印出2
如果我输入“一二三四五”并打印出字符串s,我会得到“oneZtwoZthreeZfourZfive”,表示有四个空格(while循环运行四次)。尽管如此,SpaceCount仍然保持在2
程序运行正常,但它始终显示2的空格计数,即使字符串/句子超过10或20个单词。即使使用do while/for循环,我也会得到同样的结果。我已经在这方面停留了一段时间,不知道为什么当while循环的其余部分继续执行时,SpaceCount会停留在2
非常感谢您的帮助
我只是很好奇为什么SpaceCount没有改变
在循环的第一次迭代中,您将用零(所有空格)替换”
,并增加SpaceCount
。在第二次迭代中,您没有找到任何内容(获取-1
)并替换任何内容,然后增加空间计数(获取2
)
我不会修改字符串
,而是迭代字符串
中的字符并计算空格
System.out.println("Hello, type a sentence. I will then count the "
+ "number of times you use the SPACE bar.");
Scanner keyboard = new Scanner(System.in);
String s = keyboard.nextLine();
int spaceCount = 0;
for (char ch : s.toCharArray()) {
if (ch == ' ') {
spaceCount++;
}
}
System.out.println("There are " + spaceCount + " spaces in your sentence.");
此外,按照惯例,变量名应该以小写字母开头。而且,通过在声明变量时初始化变量,可以使代码更加简洁
我只是很好奇为什么SpaceCount没有改变
在循环的第一次迭代中,您将用零(所有空格)替换”
,并增加SpaceCount
。在第二次迭代中,您没有找到任何内容(获取-1
)并替换任何内容,然后增加空间计数(获取2
)
我不会修改字符串
,而是迭代字符串
中的字符并计算空格
System.out.println("Hello, type a sentence. I will then count the "
+ "number of times you use the SPACE bar.");
Scanner keyboard = new Scanner(System.in);
String s = keyboard.nextLine();
int spaceCount = 0;
for (char ch : s.toCharArray()) {
if (ch == ' ') {
spaceCount++;
}
}
System.out.println("There are " + spaceCount + " spaces in your sentence.");
此外,按照惯例,变量名应该以小写字母开头。而且,通过在声明变量时初始化变量,您可以使代码更加简洁。使用这个,简单明了。将空格字符替换为none,并用字符串的实际长度减去它。这应该给出字符串中的空格数
Scanner n = new Scanner(System.in);
n.useDelimiter("\\n");
String s = n.next();
int spaceCount = s.length() - s.replaceAll(" ", "").length();
System.out.println(spaceCount);
使用这个,简单明了。将空格字符替换为none,并用字符串的实际长度减去它。这应该给出字符串中的空格数
Scanner n = new Scanner(System.in);
n.useDelimiter("\\n");
String s = n.next();
int spaceCount = s.length() - s.replaceAll(" ", "").length();
System.out.println(spaceCount);
你在计算空白方面走了很长的路。替换此代码块:
while (i != -1)
{
i = s.indexOf(" ");
s = s.replace(" ", "Z");
SpaceCount++;
}
为此:
char[] chars = s.toCharArray();
for(char c : chars){
if(c == ' '){
spaceCount++;
}
}
这有点优雅,而且(我相信)执行起来也比较便宜。希望这对你有用 在计算空白方面,您已经走了很长的路。替换此代码块:
while (i != -1)
{
i = s.indexOf(" ");
s = s.replace(" ", "Z");
SpaceCount++;
}
为此:
char[] chars = s.toCharArray();
for(char c : chars){
if(c == ' '){
spaceCount++;
}
}
这有点优雅,而且(我相信)执行起来也比较便宜。希望这对你有用 如果您的字符串没有尾随空格,我的意思是在字符串前后,那么您也可以使用StringTokenizer-tokenizer=new-StringTokenizer(str,“”);System.out.println(“空格总数为:”+(tokenizer.countTokens()-1))
简单地说,如果您在计算空格之前修剪字符串,我将尝试其他人提到的方法。我只是很好奇为什么SpaceCount没有改变。谢谢。如果您的字符串没有尾随空格,我的意思是在字符串前后,那么您也可以使用StringTokenizer-tokenizer=new-StringTokenizer(str,“”);System.out.println(“空格总数为:”+(tokenizer.countTokens()-1))
简单地说,如果您在计算空格之前修剪字符串,我将尝试其他人提到的方法。我只是很好奇为什么SpaceCount没有改变。谢谢。不知道s.replaceAll是一件事,谢谢!对Java还是很陌生的。是的@RyanA。运行它并检查它。很好。这是一个非常昂贵的方法。它使用正则表达式和StringBuffer
,这是一个同步类。@Gray。这是试图给出答案。很明显,您可以遍历每个字符,并将其与空格相等,然后增加计数,从而降低复杂性。这是一种尝试,用更少的代码行完成相同的工作。这很好@sameerasy。我只是想指出下一代的花费。很多人不知道replaceAll这么重。不知道s.replaceAll是个东西,谢谢!对Java还是很陌生的。是的@RyanA。运行它并检查它。很好。这是一个非常昂贵的方法。它使用正则表达式和StringBuffer
,这是一个同步类。@Gray。这是试图给出答案。很明显,您可以遍历每个字符,并将其与空格相等,然后增加计数,从而降低复杂性。这是一种尝试,用更少的代码行完成相同的工作。这很好@sameerasy。我只是想指出下一代的花费。很多人都不知道这东西这么重。@Gray这是巧合。我不知道在这种情况下该怎么办。。。我应该删除答案吗?不。那很好。有时我觉得人们只是抄袭别人的答案。如果你愿意的话,你可以把它充实一点并添加更多细节。if(char=''){
应该是if(c=''){
,char