Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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,我在让我的专栏正确排列方面遇到了问题。我所要做的就是从用户那里获取输入,然后为一列中的字母打印ASCII字符值,为下一列中的数字打印ASCII值,然后根据输入的内容为十六进制值打印一列。 除了在输入中包含数字外,所有内容都可以正常打印。当这种情况发生时,我的数字十六进制值会多次突出一个,而其他所有内容都会保持完美排列 我花了几个小时试图在不同的地方改变\t,我只是不知所措,不知道是否有人能给我任何建议。 另外,我不允许在这个作业中使用printf,所以我相信我被锁定在使用转义字符来格式化我的pr

我在让我的专栏正确排列方面遇到了问题。我所要做的就是从用户那里获取输入,然后为一列中的字母打印ASCII字符值,为下一列中的数字打印ASCII值,然后根据输入的内容为十六进制值打印一列。 除了在输入中包含数字外,所有内容都可以正常打印。当这种情况发生时,我的数字十六进制值会多次突出一个,而其他所有内容都会保持完美排列

我花了几个小时试图在不同的地方改变\t,我只是不知所措,不知道是否有人能给我任何建议。 另外,我不允许在这个作业中使用printf,所以我相信我被锁定在使用转义字符来格式化我的print语句中

提前感谢您的任何提示或建议

// This program gets input as a string, then outputs the initial characters,
// ASCII values of the characters and numbers, and hex values for each character.

import java.util.Scanner;

public class CZUnit3Ch12 {


    public static void main(String[] args) {
        //***** Variable Declaration **********
        Scanner stdIn = new Scanner(System.in);
        String userInput;
        int i;
        char character;
        //****** End Variable Declaration *********

        //****** Begin Program *********

        System.out.print("Please enter a string of any length: ");
        userInput = stdIn.nextLine();
        stdIn.close();  // close the scanner; not used anymore


        System.out.print("Initial\t\tASCII (char) \t\tASCII (int)\t\tHex\n");       // headings for each column

        for (i = 0; i<userInput.length(); i++)
        {
            character = userInput.charAt(i);

            System.out.print(userInput.charAt(i) + "\t");

            if(Character.isDigit(character))
            {
                System.out.print("\t\t\t");
                System.out.print("\t"+Integer.toString(userInput.charAt(i)));
            }
            else
            {
                System.out.print("\t" + Integer.toString(userInput.charAt(i)) + "\t");
                System.out.print("\t");
            }


            System.out.print("\t\t\t\t"+Integer.toHexString(character).toUpperCase());
            System.out.print("\n");

        } // end for

        System.out.println(""); // blank line for spacing

        System.out.println("Thank you for playing!");   
    } // end main

} // end class CZUnit3Ch12.java
//此程序以字符串形式获取输入,然后输出初始字符,
//字符和数字的ASCII值,以及每个字符的十六进制值。
导入java.util.Scanner;
公共类CZUnit3Ch12{
公共静态void main(字符串[]args){
//*****变量声明**********
扫描仪标准输入=新扫描仪(System.in);
字符串用户输入;
int i;
字符;
//******结束变量声明*********
//******开始程序*********
System.out.print(“请输入任意长度的字符串:”);
userInput=stdIn.nextLine();
stdIn.close();//关闭扫描仪;不再使用
System.out.print(“Initial\t\tASCII(char)\t\tASCII(int)\t\tHex\n”);//每列的标题

对于(i=0;i我记得在学校做过类似的作业,使用
\t
效果很好。 我试过你的代码,注意到它只会在用户输入数字时弄乱标签页,因为它跳过了一列。如果你调整标签页以适应这种情况,事情就会排成一行

public static void main(String[] args) {
    //***** Variable Declaration **********
    Scanner stdIn = new Scanner(System.in);
    String userInput;
    int i;
    char character;

    boolean bIsDigit = false;
    //****** End Variable Declaration *********

    //****** Begin Program *********

    System.out.print("Please enter a string of any length: ");
    userInput = stdIn.nextLine();
    stdIn.close();  // close the scanner; not used anymore


    System.out.print("\n\nInitial\t\tASCII (char) \t\tASCII (int)\t\tHex\n");       // headings for each column

    for (i = 0; i<userInput.length(); i++)
    {
        character = userInput.charAt(i);

        System.out.print(userInput.charAt(i) + "\t");

        if(Character.isDigit(character))
        {
            bIsDigit = true;
            System.out.print("\t\t\t");
            System.out.print("\t"+Integer.toString(userInput.charAt(i)));
        }
        else
        {
            System.out.print("\t" + Integer.toString(userInput.charAt(i)) + "\t");
            System.out.print("\t");
        }

        if(bIsDigit)
            System.out.print("\t\t\t"+Integer.toHexString(character).toUpperCase());
        else
            System.out.print("\t\t\t\t"+Integer.toHexString(character).toUpperCase());

        System.out.print("\n");
        bIsDigit = false;

    } // end for

    System.out.println(""); // blank line for spacing

    System.out.println("Thank you for playing!");   
} // end main
publicstaticvoidmain(字符串[]args){
//*****变量声明**********
扫描仪标准输入=新扫描仪(System.in);
字符串用户输入;
int i;
字符;
布尔双位数=假;
//******结束变量声明*********
//******开始程序*********
System.out.print(“请输入任意长度的字符串:”);
userInput=stdIn.nextLine();
stdIn.close();//关闭扫描仪;不再使用
System.out.print(“\n\nInitial\t\tASCII(char)\t\tASCII(int)\t\tHex\n”);//每列的标题

对于(i=0;ITAB没有标准化到特定的宽度。如果要保证在所有情况下都对齐,请仅使用空格。请查看
System.out.printf()
我的教授限制我们使用转义序列作为间隔。我最初使用printf语句编写了整个程序,当时教授在一条线程中发布了他不想让我们使用printf的内容:(因此,您必须假设选项卡的宽度是固定的(即8)然后仔细计算每个输出字段的字符数,以便只插入所需数量的制表符。关于这个问题,请访问并阅读。您应该编写一个小测试用例,也称为a,以演示您遇到的问题,还包括预期输出和实际输出。在编写测试用例时,您可能会回答自己的问题问题,如果你现在没有任何人都可以运行的测试用例。如果你减少了垂直间距,你不需要用注释来命名你的右括号。这些注释只在书中展示范围的章节中有用。这不应该成为一种习惯。对不起,我想我没有很好地阅读你的问题陈述。。。你知道,只有在输入数字时才会出错。你所要做的就是检查它是否是数字,设置一个标志,然后少打印一个制表符,以便在十六进制列下正确对齐。然后为下一个字符将标志设置回false。我肯定还有其他解决方案,但这是一种方法。这很有意义!因此“设置标志”,你的意思是使用布尔、if语句还是类似的东西?这只是我在学校里的第二门Java课程,所以我对这门课还是很陌生。谢谢你的帮助,DigitalNinja!是的,所谓“标志”,我指的是一个布尔变量,因为当你将它设置为真/假时,它就像升起/降下一个标志(编程中用于布尔变量的常用术语),通常表示应该发生不同的事情(比如做
这个
而不是
那个
)。祝你好运!