[java] 문자열에 숫자가 포함되어 있는지 확인 Java

사용자가 다음 형식으로 문자열을 입력하는 프로그램을 작성 중입니다.

"What is the square of 10?"
  1. 문자열에 숫자가 있는지 확인해야합니다.
  2. 그런 다음 숫자 만 추출합니다.
  3. 내가 사용하는 경우 .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);