2017-09-02 71 views
-1
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但一直沒能得到它仍然可以工作*:然後張貼你試過的東西,告訴我們你期望它做什麼以及它做什麼。 –

回答

2

這顯然確定所述用戶輸入串中的字符或者是字母字符或數字字符,你通過串進行迭代,然後利用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

收藏夾無法找到符號時出現編譯錯誤**不知道我有時會有點慢。 –

相關問題