2

私の目標は、Java の文字列から名前と番号を抽出することです。例: 入力 -> 出力

1234 -> 番号: [1234]、名前: []

1234,34,234 -> 数字: [1234, 34, 234], 名前: []

12,foo,123 -> 数字: [12, 123], 名前: [foo]

foo3,1234,4bar,12,12foo34 -> 数字: [1234, 12]、名前: [foo3, 4bar, 12foo34]

foo,bar -> -> 数値: []、名前: [foo, bar]

文字列のすべての部分に一致するものを思いつきましたが[^,]+(,?!,+)*、数字または名前のみを一致させる方法がわかりません(例のように、名前には数字を含めることができます)。ありがとう

4

3 に答える 3

6

正規表現のみのソリューションは次のとおりです。

(?:(\d+)|([^,]+))(?=,|$)

最初のグループ(\d+)は数字をキャプチャし、2 番目のグループ([^,]+)は残りをキャプチャします。グループの後にはコンマまたは行末が必要(?=,|$)です。

簡単なデモ:

Pattern p = Pattern.compile("(?:(\\d+)|([^,]+))(?=,|$)");
Matcher m = p.matcher("foo3,1234,4bar,12,12foo34");

while (m.find()) {
    System.out.println(m.group(1) != null 
        ? "Number: " + m.group(1)  
        : "Non-Number: " + m.group(2));
}

出力:

Non-Number: foo3
Number: 1234
Non-Number: 4bar
Number: 12
Non-Number: 12foo34
于 2013-06-21T09:35:50.157 に答える
2

スキャナーを使用できます:

Scanner sc = new Scanner(input);
sc.useDelimiter(",");
while(sc.hasNext()) {
    if(sc.hasNextInt()) {
        int readInt = sc.nextInt();
        // do something with the int
    } else {
        String readString = sc.next();
        // do something with the String
    }
}
于 2013-06-21T09:36:46.910 に答える