たとえば、入力文字列があります: "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);
}
}
}
しかし、二重チェックの後、いくつかの点を無視します。
一部のコード行は2回繰り返されます。
リストを使用します。配列を使用する方が良いとは思いません。
それで、あなたはどう思いますか?
アドバイスをお願いします。
RepalceAllを使用する
String str = "qwerty1qwerty2";
str = str.replaceAll("[^0-9]+", " ");
System.out.println(Arrays.asList(str.trim().split(" ")));
出力:
[1, 2]
[編集]
-
a.eマイナスを含める場合は、-?
を追加します。
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回から無制限の回数、可能な限り何度でも、必要に応じて還元-?
文字「-?」のいずれか0-9
「0」から「9」の範囲の文字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つの正規表現ソリューションです。
このコードを試してください
String s = "qwerty1qwerty2";
for(int i=0;i<s.length();i++)
{
if(Character.isDigit(s.charAt(i)))
System.out.print(s.charAt(i)+" ");
}