Java 从字符串中提取数字

Java 从字符串中提取数字,java,regex,Java,Regex,我有一个javaString对象 比方说 String str = "5N7BS is having a number 33 and 55c"; 所需输出:33 55 Pattern p = Pattern.compile("[0-9]+"); Matcher m = p.matcher("5N7BS is having a number 33 and 55"); while (m.find()) { System.out.println(m.group

我有一个java
String
对象

比方说

String str = "5N7BS is having a number 33 and 55c";
所需输出:
33 55

    Pattern p = Pattern.compile("[0-9]+");
    Matcher m = p.matcher("5N7BS is having a number 33 and 55");
    while (m.find()) {
        System.out.println(m.group());
    }
上述代码给出5 7 33 55作为输出。 我只想要数字后面跟字母的输出。
对于eg:55c输出:-55
但对于55c5或cc5,我不想要任何结果。


提前感谢:-)

您的问题不清楚,但这似乎符合您的要求:

str = str.replaceAll(".*?(\\b(\\d+)[a-z]*\\b|$)", " $2").trim();

下面是一些测试代码:

String str = "5N7BS is having a number 33 and 55c2 xyz";
str = str.replaceAll(".*?(\\b(\\d+)[a-z]*\\b|$)", " $2").trim();
System.out.println(str);
输出:

33

这同样有效,1个或多个数字出现,但没有任何字母

Pattern p = Pattern.compile("([0-9]+[^a-zA-Z])+");

您可以使用单词边界(
\\b
)添加所需的约束。仅当数字紧跟在边界之后,并且后面紧跟着下一个单词边界之前的字母(如果有)时,才会与数字匹配。
请注意,它使用一个专用组来捕获号码:

Pattern p = Pattern.compile("\\b([0-9]+)[a-zA-Z]*\\b");
Matcher m = p.matcher("5N7BS is having a number 33 and 55c");
while (m.find()) {
    System.out.println(m.group(1));
}
这也在起作用:-)

package.com.test;
导入java.util.LinkedList;
导入java.util.List;
公共类编号跟随Yalphabet{
公共静态void main(字符串[]args){
字符串s=“5N7BS有一个数字33和55c”;
char[]ch=s.toCharArray();
int=0;
列表=新建LinkedList();
字符串连续数字=”;
for(字符c:ch){
if(字符isDigit(c)){
连续++;
连续数+=c;
}else if(c=''| |字符.isleter(c)){
如果(连续>=2&&c!=''){
列表。添加(连续编号);
}
连续=0;
连续数字=”;
}
}
系统输出打印项次(列表);
}
}

您甚至可以使用较短的版本:

Pattern p = Pattern.compile("[0-9]+[^\\D]");

如果你只希望数字后面跟字母,为什么“33”输出?数字后面只跟一个或任意数量的字符?他的意思是他不想要字母前面的数字,不要像一个单位一样落后。我想要单独的数字和后跟字母的数字。例如:12V和12V应该给我12作为输出。对于str=“5N7BS有一个数字33和55c5 xyz”,它给3355c4 xyz作为输出。我想要单独的数字,数字后面只跟字母。@Harki说得好。我已经解决了那个问题。见编辑后的答案。
Pattern p = Pattern.compile("[0-9]+[^\\D]");