1

私は学校向けのJAVAプログラムを書こうとしています。:提供されたクラスを使用し、splitの使用を控え、異なる部分で区切られた電話番号を解析する必要があります。

    package aaronjonesprog1;


public class AaronJonesProg1 {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
        AJDissector phone = new AJDissector("1:919:882:5000");
        System.out.println(phone.getPhoneNumber());
        System.out.println(phone.getPhoneNumber(4));
        System.out.println(phone.getPhoneNumber(1));
        System.out.println(phone.getPhoneNumber(3));
        System.out.println(phone.getPhoneNumber(2));
    }
}

私の運転手:

    package aaronjonesprog1;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Aaron
 */
public class AJDissector
{

    private String phoneColon;
    private int areaCode, preCode, number, countryCode, emptyNum;   

    public AJDissector(String phoneNum)
    {
        this.phoneColon         = phoneNum;
        int index0      = phoneNum.indexOf(":");
        int index1      = phoneNum.indexOf(":", index0);
        int index2      = phoneNum.lastIndexOf(":");

        this.countryCode    = Integer.parseInt(phoneNum.substring(0, index0));
        this.areaCode       = Integer.parseInt(phoneNum.substring(index0, index1));
        this.preCode        = Integer.parseInt(phoneNum.substring(index1, index2));
        this.number         = Integer.parseInt(phoneNum.substring(index2));
    }

    public String getPhoneNumber()
    {
        return this.phoneColon;
    }

    public int getPhoneNumber(int a)
    {
        switch (a) 
        {
            case 1:
                return this.number;
            case 2:
                return this.countryCode;
            case 3:
                return this.preCode;
            case 4:
                return this.number;
            default:
                return this.emptyNum;
        }
    }
}

私が受け取るエラーは次のとおりです。

   Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:504)
    at java.lang.Integer.parseInt(Integer.java:527)
    at aaronjonesprog1.AJDissector.<init>(AJDissector.java:26)
    at aaronjonesprog1.AaronJonesProg1.main(AaronJonesProg1.java:18)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

誰かが私が間違っていることを理解するのを手伝ってもらえますか?間違った使い方をしているとは思いませんparseInthttp://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.htmlを調べて理解しようとしましたが、コードは正しいと思います。誰かが私がここで間違っていることを教えてもらえますか?

4

3 に答える 3

3

このsubstringメソッドは、指定されたインデックスを含む部分文字列を開始することに注意してください。取得している値は、文字indexOfのインデックスです。:と の使用に問題がありsubstring ます indexOf(char, index)

取得した各インデックスと部分文字列を解析する前に出力 (またはデバッガーで検査) すると、何が問題なのかがわかります。

たとえばAJDissector、部分文字列を取得するコンストラクターで、次のことを試してください。

System.out.println("substring 2 indexes: " + index0 + ", " + index1);
System.out.println("substring 2: " + phoneNum.substring(index0, index1));

各インデックスについて、全体を見てString、インデックスが で始まることを思い出して、頭の中で0の作業をsubstring行います。

于 2012-08-23T01:25:39.660 に答える
1

あなたの興味をそそるこれを行う別の方法があります。string.replace メソッドを使用して、それを分割したり、 : 表記を挿入したりできます。ここでは、別のプログラムの例を示します

 outputString = outputString.replaceAll(",",",\n" + " " );
 outputString = outputString.replaceAll("\\{","\\{\n" +" ");
 outputString = outputString.replaceAll(":",": ");
 outputString = outputString.replaceAll("}",",\n}");
 StringTokenizer output2 = new StringTokenizer(outputString,", ",true);

この置換文字列のセットは、この投稿のトピックについて説明するのが複雑な奇妙な書式設定を行いますが、これを研究すればアイデアが得られます。これを理解するには、Java String API を参照してください。

于 2012-08-23T03:24:45.877 に答える
0

たぶん、Java API をもう少し詳しく調べる必要があります。おそらく次のようなものですjava.util.Scanner

javadoc から:

正規表現を使用してプリミティブ型と文字列を解析できる単純なテキスト スキャナー。

Scanner は、デフォルトで空白に一致する区切り文字パターンを使用して、入力をトークンに分割します。結果のトークンは、さまざまな next メソッドを使用して、さまざまな型の値に変換できます。

java.util.Scanner API ドキュメント

于 2012-08-23T03:33:37.993 に答える