-1

私の計算機科学の割り当てでは、整数と文字を含む文字列を取得し、その文字列を取得して整数を含む整数配列に変換するメソッドを作成することになっています。何らかの理由で、私のメソッドは配列にintを追加していませんが、理由はわかりません。

文字列で指定されたLETTERSについては、それらを破棄することになっているため、int値のみの配列があります。元。入力:abs3131afas312配列には{3131,312}があります

これは、割り当てへのリンクです。

これが私の方法です:

public static int[] intParse(String a){
    int[] array1 = new int[a.length()];
    int b = 0;
    for(int i = 0; i < a.length(); ++i)
    {
        int g = a.charAt(i);

        if(g == 1 || g == 2 || g == 3 || g == 4 || g == 5 || g == 6 || g == 7 || g == 8 || g == 9 || g == 0)
        {

            String c;
            for(int j = i; j < a.length(); ++j)
            {
                int k = a.charAt(j);
                if(k != 1 && k != 2 && k != 3 && k != 4 && k != 5 && k != 6 && k != 7 && k != 8 && k != 9 && k != 0)
                {
                    c = a.substring(j,k-1);
                    array1[b] += Integer.parseInt(c);
                    b++;
                    j = (a.length());
                    i = a.charAt(j);

                }
                else
                {
                    c = a.substring(j,a.length());
                    array1[b] = Integer.parseInt(c);
                    j = a.length();
                }
            }

        }


    }

        return array1;
}
4

4 に答える 4

2

文字を整数と比較してを使用するInteger.parseIntのではなく、次の非常に便利なユーティリティメソッドを使用する必要があります。

Character.isDigit(int codepoint)
Character.getNumericValue(int codepoint)

また、あなたの論理は少し大ざっぱなようです。が数字コードポイントの場合k、文字列の残り全体を解析しようとしています。それはあなたが外側のループでやろうとしていることと一致していないようです。

于 2012-12-11T01:17:37.323 に答える
0

まず、aは文字列であり、整数ではなくASCII文字が含まれています。文字「1」は整数1と等しくありません。これは、たまたま49である「1」のASCII値と等しくなります。

したがって、最初にすべきことは、if条件を次のように長く変更することです。

char c = a.charAt(i);
if (c >= '0' && c <='9')
{
   ...
}

次に行うべきことは、文字列を保持することです(数字以外の文字、次に数字に遭遇するたびに新しい文字列を保持し、c見つけた文字が数字以外になるまで文字列に追加し続けます。

Integer.parseInt(yourString)次に、整数で数値を取得するために簡単に行うことができます。

于 2012-12-11T01:19:32.730 に答える
0

あなたのための修正:

char g = a.charAt(i);
if(g == '1' || g == '2' || g == '3' || g == '4' || g == '5' || g == '6' || g == '7' || g == '8' || g == '9' || g == '0') {

またはもっといい:

char g = a.charAt(i);
if(g >= '0' && g <= '9') {

あなたの他のifものも修正する必要があります

char k = a.charAt(j);
if(k < '0' || k > '9') {
于 2012-12-11T01:16:38.360 に答える
0

このアプローチを好むかもしれません:

      Scanner sc = new Scanner("abs3131afas312");
      String match;
      while ((match = sc.findInLine("(\\d+)"))!=null) {
              // instead of printing it, put it in your array
              // or a list (and then convert to array)
              System.out.println(Integer.parseInt(match));
      }         
      sc.close();

出力:

3131
312
于 2012-12-11T02:05:04.000 に答える