Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不使用长度的情况下计算java中的字符数?_Java - Fatal编程技术网

如何在不使用长度的情况下计算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()怎么样?