2

以下は、私に提供される可能性のある入力の例です。

1,4
34,2
-99,20

したがって、負の値が含まれ、1、2、3 などの数字が可能です。コンマは単なる区切り文字ではなく、単なる例です。しかし、非整数値は parseInt が機能しない理由です。上記の 3 つの入力を解析してこれを取得できるようにするには、どのようなコードを作成すればよいでしょうか?

1
34
-99
4

6 に答える 6

3

正規表現(regex)を使用できます。

カンマで区切る簡単な例:

String[] values = string.split(",")
for (String a : values) {
    Integer.parseInt(a);
}
于 2012-02-07T17:31:00.397 に答える
2

このコードを使用します:

String str = "1,4 34,2 -99,20";
String[] arr = str.split("\\D+(?<![+-])");
for (int i=0; i<arr.length; i+=2)
    System.out.println(Integer.parseInt(arr[i]));

出力:

1
34
-99
于 2012-02-07T17:31:48.637 に答える
1

区切り文字がある場合にのみ入力を有効にする場合は、"([\\-0-9]*)[,]+.*"代わりにを使用します。

区切り文字を追加する場合は、たとえば:、区切り文字セットに追加します。"([\\-0-9]*)[,|:]+.*"

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
   public static void main(String args[]) {
        try {
            String s1 = "-99,20";
            System.out.println(getNumber(s1));

            s1 = "1,4";
            System.out.println(getNumber(s1));
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static int getNumber(String s1) throws Exception {
        Pattern pattern = Pattern.compile("([\\-0-9]*)[,]*.*");
        Matcher m = pattern.matcher(s1);
        if(m.find()) {
            return Integer.parseInt(m.group(1));
        } 

        throw new Exception("Not valid input");
    }
}
于 2012-02-07T18:05:02.040 に答える
1

これは非常にオープンな質問です...最初に文字列を調べて、ドットをすべてのコンマに置き換えてすべての数値を正しくフォーマットすることをお勧めします...次に、それを分割してから、各値を解析する必要があります。

ステップごとに、グーグルで多くのヘルプを見つけることができます。

すなわち。

  • ステップ1.文字列置換java
  • ステップ2.文字列分割Java
  • ステップ3.文字列からintjava
于 2012-02-07T17:30:29.280 に答える
1

数字を除くすべての文字を空の文字列に置き換えてから、parseIntを実行できます。

String intStr = inputStr.replaceAll("[^0-9]+","");
int i = Integer.parseInt(intStr);
于 2012-02-07T17:30:37.033 に答える
1

カンマのみを使用する場合は、

String numbers = "1,34,-99";
String[] splitNums = numbers.split(",");
int[] ints = null;
for(int i = 0; i < splitNums.length(); i++) 
{
    ints[i] = Integer.valueOf(splitNums[i]);
}
于 2012-02-07T17:32:21.023 に答える