java - 一个简单的java代码中的一些错误

标签 java io

这是一个简单的 Java 代码,它不使用任何 String API 函数来反转 String,但是在最后一行,当它打印反转的字符串时,输出语句 (System.out.println()) 中存在一些问题

代码如下:

class StringReverse
{
    public static void main(String[] args) throws java.io.IOException
    {
        int str[] = new int[100];
        int i=0,j;
        System.out.println("Enter a string");
        while(true)
        {
            str[i]=System.in.read();
            if(str[i++]==13)
                break;
        }
        String reversed="",simple = new String(str,0,i-1);
        System.out.println(simple);

        // now reversing the string
        for(j=i-1;j>=0;j--)
            reversed+=((char)str[j]);
        System.out.println("String is "+reversed);
    }
}

示例输出是 enter image description here

最佳答案

这是因为您在 Windows 上运行。当您按下 Enter 时,会传输两个特殊字符 - <CR> , 或 \r , 和 <LF> , 或 \n *。你正在诱捕 \n , 并停止阅读。然而,\r保留在缓冲区中,并成为反转字符串的第一个字符。这就是为什么反转的字符串打印在你的 "String is " 之上的原因。输出。

这是最后发生的事情,一步一步:

  • "String is "打印出来;光标位于十号位置(从零开始)
  • 反转字符串的第一个字符"gagan\r"被打印出来。字符不可见,但光标位置变为零;光标停留在同一行
  • 反转字符串"nagag""Strin" 上打印"String is " 的一部分
  • 现在您看到了输出 "nagagg is"

* <CR>代表“回车”; <LF>代表“换行”。

关于java - 一个简单的java代码中的一些错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20975916/

相关文章:

java - 如何将多个对象实例化到列表中?

database - 典型的 RDBMS 如何存储和定位 block ?

java - 从 Eclipse 项目读取文件

java - 查找数组中连续的匹配元素

java - 使用 Netbeans 和 Java 在调用堆栈上设置条件断点

linux - 像 select() 或 poll() 这样的系统调用在幕后是如何工作的?

java - Android模拟器中的问题写入文件问题

java - 关闭结果集的游标?

java - 如何在 Java 中创建多个对象?

java - SparkLauncher 未启动应用程序