사용자가 다음 형식으로 문자열을 입력하는 프로그램을 작성 중입니다.
"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”의 경우 빈 문자열을 반환합니다.
답변
regex보다 빠르다고 생각합니다.
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]", "")
모든 숫자를 대체합니다.
위의 두 가지 대체를 수행하면 모든 특수 문자 문자열을 얻을 수 있습니다.
a에서 정수만 추출하려는 경우 String s=s.replaceAll("[^0-9]", "")
A에서 알파벳 만 추출하려면 String s=s.replaceAll("[^a-zA-Z]", "")
해피 코딩 🙂
답변
올바른 패턴 하나를 찾을 수 없습니다. 작고 달콤한 솔루션을 위해 아래 가이드를 따르십시오.
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("([0-9])");
Matcher m = p.matcher("Here is ur string");
if(m.find()){
System.out.println("Hello "+m.find());
}
답변
Pattern p = Pattern.compile("(([A-Z].*[0-9])");
Matcher m = p.matcher("TEST 123");
boolean b = m.find();
System.out.println(b);
