有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何为同一字符串中的字母和数字创建单独的输出,并输出它们的ASCII值?

import java.util.Scanner; 

public class testing
{
     public static void main(String[] args)
     {
        Scanner stdIn = new Scanner(System.in);
        System.out.println("Please enter a string of any length: "); 
        String convertMe = stdIn.next(); 

System.out.printf("%s%15s%15s%10s%n","Initial","ASCII<char>","ASCII<int>",
"Hex"; 

    for(int x=0; x<convertMe.length(); x++)
    {
       int ascii = (int)convertMe.charAt(x); 
       System.out.printf("%c %30d %13x%n", convertMe.charAt(x),ascii,ascii); 
    }
    System.out.printf("%n"); 
    System.out.println("Thank you for playing!"); 

 }
}

现在,代码在一列中输出所有ASCII值。我试图根据字符是字母还是数字将该列一分为二。我一直在玩isDigit,但还没能让它工作。由于它是一个字符串,我需要在我的for循环中使用它,以便在后期修复增量中检查是否为true,然后在char列中输出,如果int列中的输出为false,则可能最有效,我只是不知道如何使这项工作对编码来说仍然是非常新的

编辑1:我忘了描述程序LOL。该程序获取字符串的输入,并将字符串打印为字符、ascii值和十六进制。如果字符是一个字母,在字符列下打印,在int下打印数字。空格也应该读作ASCII,十六进制表示空格

Edit2:我和ArrayList玩得很好,但我不认为这是一个可行的选择,因为它会让字符串字符失去顺序来显示它们,因为我必须在这里打印相同的语句,这就是我的目的

   public class JMUnit3Ch12
{
public static void main(String[] args)
{
Scanner stdIn = new Scanner(System.in);
System.out.println("Please enter a string of any length: "); 
String convertMe = stdIn.nextLine(); 
System.out.printf("%s%15s%15s%10s%n","Initial","ASCII<char>", "ASCII<int>", "Hex"); 
ArrayList<Integer>numbers = new ArrayList<>();
ArrayList<Integer>letters = new ArrayList<>();

for(int x=0; x<convertMe.length(); x++)
  {
      int ascii = (int)convertMe.charAt(x);
      if(ascii<=57 && ascii>=48)
      {
          numbers.add(ascii); 
        }
        else
        {
          letters.add(ascii); 
        }

  //System.out.printf("%c %30d %13x%n", convertMe.charAt(x),ascii,ascii); 

  }

  for(int y :numbers)
  {
  System.out.printf("%c %30d %13x %n",y,y,y); 
}
for(int z: letters)
{
  System.out.printf("%c %15d %28x %n",z,z,z); 
}

  //System.out.println(numbers); 
System.out.printf("%n"); 
System.out.println("Thank you for playing!"); 

  }
}

共 (1) 个答案

  1. # 1 楼答案

    显然,当您在字符串中迭代时,确定用户输入字符串中的哪些字符是字母字符或数字字符,然后利用printf()格式字符串来适应或

    要查看字符串是字母字符还是数字字符,可以使用String.matches()方法,该方法利用Regular Expressions (RegEx)进行确定。在下面的示例代码(这是您修改的代码)中,我们使用\d表达式,它基本上看我们匹配的字符(字符串)是否是数字。如果是,则生成布尔值true,如果不是,则生成布尔值false。在下面的代码中,您会注意到我们使用了\\d而不是\d,这是因为表达式中的反斜杠(\)被称为转义字符,在字符串中使用时也必须转义。所以基本上,你必须摆脱逃逸角色。你最终会找到字符串。matches()方法对于特定场合来说是一种非常方便的方法

    如果发现一个字符是字母,则使用一种格式,如果是数字,则使用另一种格式。将所需格式放入字符串变量中,然后在printf()方法中使用该变量

    此外,我不知道这是否也存在于IDE中,但您在控制台输出中缺少了显示表头的右括号[。这应该会造成编译错误

    这是:

    System.out.printf("%s%15s%15s%10s%n","Initial","ASCII<char>","ASCII<int>","Hex"; 
    

    应该是:

    System.out.printf("%s%15s%15s%10s%n","Initial","ASCII<char>","ASCII<int>","Hex");
    

    无论如何:

    Scanner stdIn = new Scanner(System.in);
    System.out.println("Please enter a string of any length: "); 
    // Read the input string as a complete line
    String convertMe = stdIn.nextLine(); 
    
    // Establish a Header in console display
    System.out.printf("%s%15s%15s%10s%n", "Initial", "ASCII<char>", "ASCII<int>", "Hex");
    // Create a header underline in console display
    System.out.println(String.join("", Collections.nCopies(29, "\u2500")));
    
    String displayFormat;
    for(int x = 0; x < convertMe.length(); x++) {
        String c = Character.toString(convertMe.charAt(x));
        // Create a display format to accomodate whether
        // or not the character is alpha or numeric.
        // Is the character numeric?
        if (c.matches("\\d")) {
            displayFormat = "%4c %28d %13x %n";
        }
        // Nope..it's a alpha character
        else {
            displayFormat = "%4c %13d %28x %n";
        }
        int ascii = c.charAt(0); 
        System.out.printf(displayFormat, convertMe.charAt(x), ascii, ascii); 
    }
    System.out.printf("%n"); 
    System.out.println("Thank you for playing!");