ユーザーが次の形式で文字列を入力するプログラムを書いています。
"What is the square of 10?"
- 文字列に数字があることを確認する必要があります
- 数だけを抽出します。
.contains("\\d+")またはを使用する.contains("[0-9]+")と、プログラムは文字列内の数値を見つけることができません。入力が何で.matches("\\d+")あっても、数値しか存在しない場合にのみ機能します。
検索と抽出のソリューションとして何を使用できますか?
ユーザーが次の形式で文字列を入力するプログラムを書いています。
"What is the square of 10?"
.contains("\\d+")またはを使用する.contains("[0-9]+")と、プログラムは文字列内の数値を見つけることができません。入力が何で.matches("\\d+")あっても、数値しか存在しない場合にのみ機能します。検索と抽出のソリューションとして何を使用できますか?
回答:
これを試して
str.matches(".*\\d.*");
入力文字列から最初の数値を抽出したい場合は、
public static String extractNumber(final String str) {
if(str == null || str.isEmpty()) return "";
StringBuilder sb = new StringBuilder();
boolean found = false;
for(char c : str.toCharArray()){
if(Character.isDigit(c)){
sb.append(c);
found = true;
} else if(found){
// If we already found a digit before and this char is not a digit, stop looping
break;
}
}
return sb.toString();
}
例:
入力「123abc」の場合、上記のメソッドは123を返します。
「abc1000def」の場合、1000。
「555abc45」の場合、555。
「abc」の場合、空の文字列を返します。
正規表現よりも速いと思います。
public final boolean containsDigit(String s) {
boolean containsDigit = false;
if (s != null && !s.isEmpty()) {
for (char c : s.toCharArray()) {
if (containsDigit = Character.isDigit(c)) {
break;
}
}
}
return containsDigit;
}
s=s.replaceAll("[*a-zA-Z]", "") すべてのアルファベットを置き換える
s=s.replaceAll("[*0-9]", "") すべての数値を置き換えます
2つ以上の置換を行うと、すべての特殊文字列が取得されます
から整数のみを抽出したい場合 String s=s.replaceAll("[^0-9]", "")
からアルファベットだけを抽出したい場合 String s=s.replaceAll("[^a-zA-Z]", "")
幸せなコーディング:)
正しいパターンが1つも見つかりませんでした。小さくて甘い解決策については、以下のガイドに従ってください。
String regex = "(.)*(\\d)(.)*";
Pattern pattern = Pattern.compile(regex);
String msg = "What is the square of 10?";
boolean containsNumber = pattern.matcher(msg).matches();
Pattern p = Pattern.compile("(([A-Z].*[0-9])");
Matcher m = p.matcher("TEST 123");
boolean b = m.find();
System.out.println(b);
次のパターンを試してください。
.matches("[a-zA-Z ]*\\d+.*")
"please"これが失敗すると言う場合。さらに、OPの例では、「?」があります。説明します。
"10"、サンプルのような回答には機能しません。
私が行った解決策は次のようになります:
Pattern numberPat = Pattern.compile("\\d+");
Matcher matcher1 = numberPat.matcher(line);
Pattern stringPat = Pattern.compile("What is the square of", Pattern.CASE_INSENSITIVE);
Matcher matcher2 = stringPat.matcher(line);
if (matcher1.find() && matcher2.find())
{
int number = Integer.parseInt(matcher1.group());
pw.println(number + " squared = " + (number * number));
}
私はそれが完璧な解決策ではないと確信していますが、それは私のニーズに適していました。助けてくれてありがとう。:)
あなたはこれを試すことができます
String text = "ddd123.0114cc";
String numOnly = text.replaceAll("\\p{Alpha}","");
try {
double numVal = Double.valueOf(numOnly);
System.out.println(text +" contains numbers");
} catch (NumberFormatException e){
System.out.println(text+" not contains numbers");
}
数値を探すだけでなく、それを抽出したいので、それを行う小さな関数を書くべきです。あなたが数字を見つけるまで、文字ごとに行きます。ああ、ちょうどstackoverflowであなたのために必要なコードを見つけました:stringで整数を見つけてください。受け入れられた答えを見てください。
public String hasNums(String str) {
char[] nums = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char[] toChar = new char[str.length()];
for (int i = 0; i < str.length(); i++) {
toChar[i] = str.charAt(i);
for (int j = 0; j < nums.length; j++) {
if (toChar[i] == nums[j]) { return str; }
}
}
return "None";
}