如何在不使用长度的情况下计算java中的字符数?

时间:2016-05-10 20:33:05

标签: java

我正在尝试创建一个程序来计算用户输入的单词中的字符数,而我想要使用.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();
            }
        }
    }
};

1 个答案:

答案 0 :(得分:3)

这是因为即使\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之前停止):

while ((c = (char) cin.read()) != '\n' && c != '\r') {
    System.out.print(c);
    counter++;
}
System.out.println(); // this is to print the new line character anyway