如何在不使用长度的情况下计算java中的字符数?
我正在尝试创建一个程序,该程序将计算用户输入的单词中的字符数,而我不想使用如何在不使用长度的情况下计算java中的字符数?,java,Java,我正在尝试创建一个程序,该程序将计算用户输入的单词中的字符数,而我不想使用.length函数 我的问题是,无论我做什么,程序都会告诉我,比我输入的字母多出一个字母 这是我的代码: import java.io.IOException; import java.io.InputStreamReader; public class count { public static void main(String args[]) throws IOException {
.length
函数
我的问题是,无论我做什么,程序都会告诉我,比我输入的字母多出一个字母
这是我的代码:
import java.io.IOException;
import java.io.InputStreamReader;
public class count {
public static void main(String args[]) throws IOException
{
InputStreamReader cin = null;
int counter=0;
try {
cin = new InputStreamReader(System.in);
System.out.println("Enter text: ");
char c;
do {
c = (char) cin.read();
System.out.print(c);
counter++;
} while(c != '\n');
} finally {
counter -=1;
System.out.println("Number of characters: " + counter);
if (cin != null) {
cin.close();
}
}
}
};
这是因为即使
\n
也会使代码增加计数器
更改循环的一种方法如下:
while ((c = (char) cin.read()) != '\n') {
System.out.print(c);
counter++;
}
System.out.println(); // this is to print the new line character anyway
这会提前执行测试,因此计数器不会增加
请注意,c=(char)cin.read()
不仅将读取字符的值赋给c
,而且是一个表达式,其值是刚刚读取的字符。这就是为什么我们可以将它与\n
进行比较
更一般地说,赋值操作(=)也是一个表达式,其值是赋值右侧的值(您也可以将其视为赋值后变量的值)
正如“JAN”指出的,为了独立于平台,您不妨考虑检查<代码> \r>代码>(它将在<代码> \r\n>代码>之前停止):
这是因为即使
\n
也会使代码增加计数器
更改循环的一种方法如下:
while ((c = (char) cin.read()) != '\n') {
System.out.print(c);
counter++;
}
System.out.println(); // this is to print the new line character anyway
这会提前执行测试,因此计数器不会增加
请注意,c=(char)cin.read()
不仅将读取字符的值赋给c
,而且是一个表达式,其值是刚刚读取的字符。这就是为什么我们可以将它与\n
进行比较
更一般地说,赋值操作(=)也是一个表达式,其值是赋值右侧的值(您也可以将其视为赋值后变量的值)
正如“JAN”指出的,为了独立于平台,您不妨考虑检查<代码> \r>代码>(它将在<代码> \r\n>代码>之前停止):
这将是可行的,但是你可以考虑让它独立于平台。在某些操作系统上,换行符可能是“\r\n”,这将再次导致额外的字符计数,不是吗?@Jan我将其保留为OP所做的,但您是对的,例如,它将导致在Windows上额外的字符计数。为了停止循环,我们还必须检查<代码> \r>代码>。这将起作用,但是你可以考虑使它独立于平台。在某些操作系统上,换行符可能是“\r\n”,这将再次导致额外的字符计数,不是吗?@Jan我将其保留为OP所做的,但您是对的,例如,它将导致在Windows上额外的字符计数。还必须检查
\r
才能停止循环。那么str.chars().count()
呢?str.chars().count()怎么样?