如何在同一个字符串中为字母和数字创建单独的输出并输出其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循环后修复增量检查是否真正然后在char列输出如果在int列中的错误输出可能会工作最好我只是不明白如何使这项工作仍然很新编码。如何在同一个字符串中为字母和数字创建单独的输出并输出其ASCII值?

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

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!"); 

    } 
} 
+0

*我一直在玩弄ISDIGIT但一直没能得到它仍然可以工作*:然后张贴你试过的东西,告诉我们你期望它做什么以及它做什么。 –

这显然确定所述用户输入串中的字符或者是字母字符或数字字符,你通过串进行迭代,然后利用printf()的格式字符串,以容纳一个简单的事情两者任一。

要查看是否有串字符是一个字母或数字字符,你可以用它利用Regular Expressions (RegEx)进行判断的String.matches()方法。在下面的示例代码中(这是您的代码修改),我们利用表达式,它基本上查看我们匹配的字符(字符串)是否为数字。如果是,它会生成布尔值true,如果不是,则会生成布尔值false。您将在下面的代码,我们使用\\ d,而不是\ d注意到,这是因为反斜杠字符(\),它是表达的部分被称为转义字符,它也必须进行转义在字符串中使用时。所以基本上,你必须逃避逃跑角色。您最终会发现String.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!"); 
+0

收藏夹无法找到符号时出现编译错误**不知道我有时会有点慢。 –