我正在编写一个程序,用户按以下格式输入字符串:
"What is the square of 10?"
.contains("\\d+")
或.contains("[0-9]+")
,无论输入是什么,程序都无法在字符串中找到数字,但.matches("\\d+")
仅在只有号。我可以使用什么作为查找和提取的解决方案?
答案 0 :(得分:192)
试试这个
str.matches(".*\\d.*");
答案 1 :(得分:26)
如果要从输入字符串中提取第一个数字,可以执行 -
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”,将返回一个空字符串。
答案 2 :(得分:9)
我认为它比正则表达式快。
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;
}
答案 3 :(得分:9)
s=s.replaceAll("[*a-zA-Z]", "")
替换所有字母
s=s.replaceAll("[*0-9]", "")
取代所有数字
如果你做了以上两次替换,你将得到所有特殊的字符串
如果您只想从String s=s.replaceAll("[^0-9]", "")
如果您只想从String s=s.replaceAll("[^a-zA-Z]", "")
快乐编码:)
答案 4 :(得分:9)
我找不到正确的单一模式。 请按照以下指南获得一个小而甜蜜的解决方案。
String regex = "(.)*(\\d)(.)*";
Pattern pattern = Pattern.compile(regex);
String msg = "What is the square of 10?";
boolean containsNumber = pattern.matcher(msg).matches();
答案 5 :(得分:8)
以下代码足以支持"检查字符串是否包含Java中的数字"
Pattern p = Pattern.compile("([0-9])");
Matcher m = p.matcher("Here is ur string");
if(m.find()){
System.out.println("Hello "+m.find());
}
答案 6 :(得分:6)
尝试以下模式:
.matches("[a-zA-Z ]*\\d+.*")
答案 7 :(得分:6)
Pattern p = Pattern.compile("(([A-Z].*[0-9])");
Matcher m = p.matcher("TEST 123");
boolean b = m.find();
System.out.println(b);
答案 8 :(得分:5)
我选择的解决方案如下:
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));
}
我确信这不是一个完美的解决方案,但它符合我的需求。谢谢大家的帮助。 :)
答案 9 :(得分:1)
你可以试试这个
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");
}
答案 10 :(得分:1)
由于您不仅要查找数字而且还要提取它,您应该编写一个小函数来为您完成。一字一句地去,直到你发现一个数字。啊,刚刚在stackoverflow上找到了你需要的代码:find integer in string。看看接受的答案。
答案 11 :(得分:1)
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";
}
答案 12 :(得分:1)
.matches(".*\\d+.*")
仅适用于数字,但不适用于//
或*
等其他符号。
答案 13 :(得分:1)
当我被重定向到这里寻找一种在 Kotlin
语言中查找字符串中数字的方法时,我将把我的发现留在这里供其他想要 Kotlin 特定解决方案的人使用。
判断一个字符串是否包含数字:
val hasDigits = sampleString.any { it.isDigit() }
确定字符串是否包含仅数字:
val hasOnlyDigits = sampleString.all { it.isDigit() }
从字符串中提取数字:
val onlyNumberString = sampleString.filter { it.isDigit() }
答案 14 :(得分:0)
ASCII是UNICODE的开头,所以你可以这样做:
(x >= 97 && x <= 122) || (x >= 65 && x <= 90) // 97 == 'a' and 65 = 'A'
我确定你能算出其他值...
答案 15 :(得分:0)
下面的代码段将说明字符串是否包含数字
+1
例如
str.matches(".*\\d.*")
or
str.matches(.*[0-9].*)