最近在 看Scanner相关的知识,由于涉及到Enter键的问题,于是网上查资料,突然看到一篇博客关于Java中Enter键的疑问,由于里面是大学课本中的知识,所以里面对Enter键的介绍应该是权威性的东西。即

Enter键当做两个字符:一个是ASCII码值为13的回车符(Carriage Return) “\r”;另一个是ASCII码值为10的换行符 “\n”

java怎么判断返回的结果是json字符串 java判断回车键_System


  看了博主的博客后,于是就想着研究下博主的疑问。通过研究发现IntelliJ IDEA(版本:IntelliJ IDEA 2021.3.3 (Ultimate Edition))打印的结果有问题,研究问题:Enter键在java中是几个字符,如何打印Enter键。

小编使用的IntelliJ IDEA是破解版,只为学习使用。

java怎么判断返回的结果是json字符串 java判断回车键_java_02


博主书本中的代码图片:

java怎么判断返回的结果是json字符串 java判断回车键_System_03


研究使用代码:

package com.demo;

import java.io.BufferedInputStream;
import java.io.IOException;

/**
 * 
 */
public class app10_4 {
    public static void main(String[] args) {
        try {
            byte[] b = new byte[128];          //设置缓冲区
            //System.out.println(System.in.getClass());

            System.out.print("please input:");
            int count = System.in.read(b);
            System.out.println("your input:");
            for (int i = 0; i < count; i++) {
            	System.out.print(b[i] + " ");
            }
                
            System.out.println();
            for (int i = 0; i < count -2; i++)
                System.out.print((char) b[i] + " ");
            System.out.println();
            System.out.println("input num:" + count);
            //Class InClass = System.in.getClass();
            //Class OutClass = System.out.getClass();
            //System.out.println("in class:" + InClass.toString());
            //System.out.println("out class:" + OutClass.toString());
        } catch (IOException e) {
        }
    }
}

不同编辑器打印结果

java怎么判断返回的结果是json字符串 java判断回车键_System_04

注:abc后面有Enter键
Eclipse和CMD打印的结果都是5,IDEA打印的却是4(有点坑人啊)
不清楚IDEA是不是有bug:
第一种可能:IDEA键盘输入流相关的,在软件内部设计如此
第二种可能:IDEA键盘输入流相关的,可以在软件设置中进行设置,比如把Enter键当成一个字符或者两个字符的设置

第三种可能:这个涉及到Enter键相关的是IDEA自身的bug

第四种可能:我用的是破解版的IDEA,是破解版导致的这个问题

这几种可能,第三种小编认为可能性更大。由于时间关系,不再研究其他几种可能了,就认为是IDEA的bug吧,这个确实很坑,容易误导人。

希望IDEA能够尽快解决这个问题,不然容易误导人
另外:网上有些说法感觉不太正确(可能只是编写时不注意)。下面试小编的理解:
Enter键:\r\n。网上有说是 \n\r的

ASCII码值:\n是10,\r是13

Windows系统中文件行的末尾(如果加了Enter键),行尾是:\r\n。(有的博客说的是 \n\r,可能写的时候不注意,容易误导人)

平时闲聊的时候,大家说的敲回车,是指的敲Enter键,回车也是指Enter键。如果涉及到程序问题,Enter键就是Enter键,只说回车也是指Enter键(回车+换行)

java怎么判断返回的结果是json字符串 java判断回车键_System_05


代码

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * 
 */
public class app10_5 {
    public static void main(String[] args)
    {
        //try(FileInputStream fr = new FileInputStream("D:/Myfile.txt");)
        try(FileReader fr = new FileReader("D:/Myfile.txt");)
        {
            //byte [] c = new byte[250];
            char [] c = new char[250];
            int num =fr.read(c);//this read methods return the number of characters read
            String str = new String(c,0,num);
            System.out.println("文本中的字符有"+num+"个");
            System.out.println("文本中的内容是:"+str);
        }
        catch (FileNotFoundException e)
        {
            System.out.println("file not found");
        }
        catch (IOException e)
        {
            System.out.println("IOException");
        }
    }
}

参考:关于Java中Enter键的疑问此问题已经发过一贴,但没有清楚,关于System.in.read()方法是抽象方法InputStream read()方法详解向InputStream的开头和结尾添加字符System.in.read()的用法Java中的回车(\r)和换行(\n)Java开发之回车换行符,我跳过的坑你跳过吗?–中享思途   小编写这个博客的时候,差点把锅煮坏,早上煮的鸡蛋,一直煮了1个小时,厨房离我坐着写博客的位置只有3米远,能听到锅里的嘟嘟的声音,眼睛还能看到锅,就这么眼睁睁的煮着。竟然忘了煮鸡蛋这事,幸亏添的水多。