我有一个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作为输出。
我只想要输出数字后跟字母表的输出
例如:55c输出: - 55
但对于55c5或cc5,我不想要任何结果
在此先感谢: - )
答案 0 :(得分:2)
你的问题不清楚,但这似乎符合你的要求:
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 :(得分:2)
您可以使用字边界(\\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));
}
答案 2 :(得分:0)
这也有效,一个或多个数字出现,但没有任何字母。
Pattern p = Pattern.compile("([0-9]+[^a-zA-Z])+");
答案 3 :(得分:0)
这也有效: - )
package com.test;
import java.util.LinkedList;
import java.util.List;
public class NumbersFollowedByAlphabet {
public static void main(String[] args) {
String s = "5N7BS is having a number 33 and 55c";
char [] ch = s.toCharArray();
int consecutive = 0;
List<String> list = new LinkedList<String>();
String consecutiveNumber = "";
for(char c : ch) {
if(Character.isDigit(c)) {
consecutive++;
consecutiveNumber += c;
} else if(c == ' ' || Character.isLetter(c)) {
if(consecutive >= 2 && c != ' ') {
list.add(consecutiveNumber);
}
consecutive = 0;
consecutiveNumber = "";
}
}
System.out.println(list);
}
}
答案 4 :(得分:0)
您甚至可以使用较短的版本:
Pattern p = Pattern.compile("[0-9]+[^\\D]");