2017-09-02 14 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!"); 

} 
} 

現在、コードは1つの列にすべてのASCII値を出力しています。私はcharが文字か数字かに基づいてその列を2つに分割しようとしています。私はisDigitで遊んでいますが、まだ動作させることができませんでした。それは文字列なので、私のforループで、修正後のインクリメントをチェックする必要があります。もしintカラムのfalse出力がおそらく最もうまくいくなら、charカラムに出力してください。コーディングする。同じ文字列内に文字と数字を別々に出力してASCII値を出力するにはどうすればいいですか?

編集1:私はプログラムLOLを記述するのを忘れていました。プログラムは文字列の入力を取得し、その文字列をchar、ascii値、および16進数として出力します。 charがcharの列とintの下にある文字の下にある文字の場合空白は、スペースとしてASCIIとHEXとしても読み取る必要があります。

編集2:arraylistsで遊んでいてうまくいきましたが、私はここで同じ文章で印刷しなければならないので、文字列charsを表示しないために実行可能なオプションではないと思いますどこにいますか?

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()フォーマット文字列を使用しているとして、それは明らかにユーザ入力文字列内のどの文字を決定するための簡単な問題では、アルファ文字や数字のいずれかであるですまたは。

文字列の文字は、Alphaまたはあなたが決意をするためにRegular Expressions (RegEx)を利用String.matches()メソッドを使用することができます数字のどちらかであるかどうかを確認します。下記のコード例(コードは変更されています)では、一致する文字(文字列)が数値かどうかを調べる\ dの式を使用しています。そうであれば、ブール値trueを生成し、ブール値falseを生成します。下のコードで\の代わりに\ dを使用していることがわかります。これは、Expressionの一部である円記号(\)がエスケープ文字と呼ばれ、エスケープされなければならないためですStringで使用されている場合。基本的に、エスケープ文字をエスケープする必要があります。最終的にString.matches()メソッドが特定の機会には非常に便利なメソッドであることがわかります。

文字がアルファであると判明した場合は、1つのフォーマットを使用し、数字の場合は別のフォーマットを使用します。目的の書式をString変数に置き、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

コレクションがシンボルを見つけることができないため、コンパイルエラーが発生する** nevermindときどき少し遅くなることがあります。 –

関連する問題