26

たとえば、次の文字列を入力しました: " qwerty1qwerty2 ";

出力として[1,2]が欲しいです。

以下の私の現在の実装:

import java.util.ArrayList;
import java.util.List;

public class Test1 {

    public static void main(String[] args) {
        String inputString = args[0];
        String digitStr = "";
        List<Integer> digits = new ArrayList<Integer>();

        for (int i = 0; i < inputString.length(); i++) {
            if (Character.isDigit(inputString.charAt(i))) {
                digitStr += inputString.charAt(i);
            } else {
                if (!digitStr.isEmpty()) {
                    digits.add(Integer.parseInt(digitStr));
                    digitStr = "";
                }
            }
        }
        if (!digitStr.isEmpty()) {
            digits.add(Integer.parseInt(digitStr));
            digitStr = "";
        }

        for (Integer i : digits) {
            System.out.println(i);
        }
    }
}

しかし、再確認した後、私はいくつかの点を明らかにしました:

  1. コードの一部の行が2回繰り返されます。

  2. 私はリストを使用します。配列を使用するのはあまり良い考えではないと思います。

それで、あなたはどう思いますか?

何かアドバイスをいただけますか?

4

3 に答える 3

67

replaceAllを使用します。

String str = "qwerty1qwerty2";      
str = str.replaceAll("[^0-9]+", " ");
System.out.println(Arrays.asList(str.trim().split(" ")));

出力:

[1, 2]

[編集]

aeマイナスを含める場合は、次-を追加し-?ます。

String str = "qwerty-1qwerty-2 455 f0gfg 4";      
str = str.replaceAll("[^-?0-9]+", " "); 
System.out.println(Arrays.asList(str.trim().split(" ")));

出力:

[-1, -2, 455, 0, 4]

説明

[^-?0-9]+
  • +1回から無制限の時間の間、可能な限り多く、必要に応じて還元する
  • -?文字の1つ「-?」</ li>
  • 0-9「0」から「9」までの範囲の文字</li>
于 2012-11-18T13:34:57.243 に答える
5
import java.util.regex.Matcher;
import java.util.regex.Pattern;

...

Pattern pattern = Pattern.compile("[0-9]+"); 
Matcher matcher = pattern.matcher("test1string1337thingie");

// Find all matches
while (matcher.find()) { 
  // Get the matching string  
  String match = matcher.group();
}

1つの正規表現ソリューションです。

于 2012-11-18T13:27:40.427 に答える
2

このコードを試してください

String s = "qwerty1qwerty2";
for(int i=0;i<s.length();i++)
{
   if(Character.isDigit(s.charAt(i)))
   System.out.print(s.charAt(i)+"  ");
}
于 2012-11-18T13:55:01.587 に答える