Проверьте, содержит ли строка числа Java
Я пишу программу, где пользователь вводит строку в следующем формате:
"What is the square of 10?"
- мне нужно проверить, что есть число в строке
- а затем извлечь только номер.
- если я использую
.contains("d+")
или.contains("[0-9]+")
, программа не может найти число в строке, независимо от того, что вход, но.matches("d+")
будет работать только тогда, когда есть только цифры.
что я могу использовать в качестве решения для поиска и извлечение?
14 ответов:
Если вы хотите извлечь первое число из входной строки, вы можете сделать-
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", вернет пустую строку.
s=s.replaceAll("[*a-zA-Z]", "")
заменяет все буквы
s=s.replaceAll("[*0-9]", "")
заменяет все цифрыесли вы делаете выше двух заменяет вы получите все специальные charactered string
если вы хотите извлечь только целые числа из
String s=s.replaceAll("[^0-9]", "")
если вы хотите извлечь только буквы от
String s=s.replaceAll("[^a-zA-Z]", "")
удачи в кодировании :)
Pattern p = Pattern.compile("(([A-Z].*[0-9])"); Matcher m = p.matcher("TEST 123"); boolean b = m.find(); System.out.println(b);
Я не смог найти ни одного правильного шаблона. Пожалуйста, следуйте приведенному ниже руководству для небольшого и сладкого решения.
String regex = "(.)*(\d)(.)*"; Pattern pattern = Pattern.compile(regex); String msg = "What is the square of 10?"; boolean containsNumber = pattern.matcher(msg).matches();
Я думаю, что это быстрее, чем регулярное выражение .
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; }
приведенный ниже код достаточно для "проверить, если строка содержит числа в Java"
Pattern p = Pattern.compile("([0-9])"); Matcher m = p.matcher("Here is ur string"); if(m.find()){ System.out.println("Hello "+m.find()); }
решение, с которым я пошел, выглядит так:
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:найти целое число в строку. Посмотрите на принятый ответ.
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"; }