检查一个string是否包含数字Java

我正在编写一个程序,用户inputstring的格式如下:

"What is the square of 10?" 
  1. 我需要检查string中是否有数字
  2. 然后只提取数字。
  3. 如果我使用.contains("\\d+").contains("[0-9]+") ,程序无法在string中find一个数字,不pipeinput是什么,但.matches("\\d+")只有在只有数字的情况下才有效。

我可以使用什么作为查找和解压缩的解决scheme?

尝试这个

 str.matches(".*\\d+.*"); 

如果你想从inputstring中提取第一个数字,你可以做 –

 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(); } 

例子:

对于input“123abc”,上面的方法将返回123。

对于“abc1000def”,1000。

对于“555abc45”,555。

对于“abc”,将返回一个空string。

s=s.replaceAll("[*a-zA-Z]", "")replace所有字母

s=s.replaceAll("[*0-9]", "")replace所有的数字

如果你以上两个replace你会得到所有特殊的string

如果只想从String s=s.replaceAll("[^0-9]", "")提取整数,

如果只想从String s=s.replaceAll("[^a-zA-Z]", "")提取字母,

快乐编码:)

 Pattern p = Pattern.compile("(([AZ].*[0-9])"); Matcher m = p.matcher("TEST 123"); boolean b = m.find(); System.out.println(b); 

下面的代码足以“检查一个string是否包含Java中的数字”

 Pattern p = Pattern.compile("([0-9])"); Matcher m = p.matcher("Here is ur string"); if(m.find()){ System.out.println("Hello "+m.find()); } 

我认为它比正则expression式更快。

 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; } 

尝试以下模式:

 .matches("[a-zA-Z ]*\\d+.*") 

我找不到一个正确的模式。 请遵循下面的指南,一个小而甜蜜的解决scheme。

 String regex = "(.)*(\\d)(.)*"; Pattern pattern = Pattern.compile(regex); String msg = "What is the square of 10?"; boolean containsNumber = pattern.matcher(msg).matches(); 
 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"; } 

你可以试试这个

 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"); } 

因为你不仅要查找一个数字,而且要提取它,你应该写一个小函数来为你做。 逐字逐句直到find一个数字。 啊,只是find你需要的代码在stackoverflow: 查找string中的整数 。 看看接受的答案。

我去的解决scheme是这样的:

  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)); } 

我相信这不是一个完美的解决scheme,但它适合我的需求。 谢谢大家的帮助。 🙂

.matches(".*\\d+.*")仅适用于数字,不适用于其他符号,如//*

ASCII是在UNICODE的开始,所以你可以做这样的事情:

(x> = 97 && x <= 122)|| (x> = 65 && x <= 90)

// 97 =='a'和65 ='A',我相信你可以找出其他值…