private static final Pattern p = Pattern.compile("^([a-zA-Z]+)([0-9]+)(.*)");
public static void main(String[] args) {
// create matcher for pattern p and given string
Matcher m = p.matcher("Testing123Testing");
// if an occurrence if a pattern was found in a given string...
if (m.find()) {
// ...then you can use group() methods.
System.out.println(m.group(0)); // whole matched expression
System.out.println(m.group(1)); // first expression from round brackets (Testing)
System.out.println(m.group(2)); // second one (123)
System.out.println(m.group(3)); // third one (Testing)
}
}
Pattern p = Pattern.compile("(\\D+)(\\d+)(.*)");
Matcher m = p.matcher("this is your number:1234 thank you");
if (m.find()) {
String someNumberStr = m.group(2);
int someNumberInt = Integer.parseInt(someNumberStr);
}
// Regexplanation:
// ^ beginning of line
// \\D+ 1+ non-digit characters
// (\\d+) 1+ digit characters in a capture group
// .* 0+ any character
String regexStr = "^\\D+(\\d+).*";
// Compile the regex String into a Pattern
Pattern p = Pattern.compile(regexStr);
// Create a matcher with the input String
Matcher m = p.matcher(inputStr);
// If we find a match
if (m.find()) {
// Get the String from the first capture group
String someDigits = m.group(1);
// ...do something with someDigits
}
util类中的解决方案
public class MyUtil {
private static Pattern pattern = Pattern.compile("^\\D+(\\d+).*");
private static Matcher matcher = pattern.matcher("");
// Assumptions: inputStr is a non-null String
public static String extractFirstNumber(String inputStr){
// Reset the matcher with a new input String
matcher.reset(inputStr);
// Check if there's a match
if(matcher.find()){
// Return the number (in the first capture group)
return matcher.group(1);
}else{
// Return some default value, if there is no match
return null;
}
}
}
...
// Use the util function and print out the result
String firstNum = MyUtil.extractFirstNumber("Testing4234Things");
System.out.println(firstNum);
String input = "...";
Matcher matcher = Pattern.compile("[^0-9]+([0-9]+)[^0-9]+").matcher(input);
if (matcher.find()) {
String someNumberStr = matcher.group(1);
// if you need this to be an int:
int someNumberInt = Integer.parseInt(someNumberStr);
}
String str = "as:"+123+"as:"+234+"as:"+345;
StringTokenizer st = new StringTokenizer(str,"as:");
while(st.hasMoreTokens())
{
String k = st.nextToken(); // you will get first numeric data i.e 123
int kk = Integer.parseInt(k);
System.out.println("k string token in integer " + kk);
String k1 = st.nextToken(); // you will get second numeric data i.e 234
int kk1 = Integer.parseInt(k1);
System.out.println("new string k1 token in integer :" + kk1);
String k2 = st.nextToken(); // you will get third numeric data i.e 345
int kk2 = Integer.parseInt(k2);
System.out.println("k2 string token is in integer : " + kk2);
}
13条答案
按热度按时间sigwle7e1#
除了pattern之外,java string类还有几个方法可以处理正则表达式,在您的例子中,代码是:
哪里
\\D
是非数字字符。dfty9e192#
allain基本上有java代码,所以您可以使用它。但是,他的表达式仅在您的数字前面有一系列单词字符时匹配。
应该能找到第一个数字串。如果您确定它将是第一个数字字符串,则不需要指定它前面的内容。同样地,除非你想要,否则没有必要指定它后面的内容。如果你只想要这个数字,并且确定它将是一个或多个数字的第一个字符串,那么这就是你所需要的。
如果您希望它被空格偏移,那么它将使指定它更加清晰
可能更好。
如果您需要这三个部分,可以:
编辑allain和jack给出的表达式,建议您需要指定一些非数字的子集,以便捕获数字。如果你告诉正则表达式引擎你要找的
\d
然后它会忽略数字之前的一切。如果j或a的表达式符合您的模式,那么整个匹配就等于输入字符串。没有理由具体说明。如果不是完全忽略的话,它可能会减慢一场平局的速度。tkclm6bt3#
完整示例:
由于要查找第一个数字,因此可以使用以下regexp:
以及
m.group(1)
我会把第一个号码还给你。请注意,有符号的数字可以包含减号:bpzcxfmw4#
输出:
wbgh16ku5#
有时可以使用java.lang.string中提供的simple.split(“regexp”)方法。例如:
nr9pn0ug6#
尝试这样做:
vfh0ocws7#
xdnvmnnf8#
简单的解决方案
util类中的解决方案
rggaifut9#
此函数从字符串中收集所有匹配的序列。在本例中,它从字符串获取所有电子邮件地址。
为了
message = "adf@gmail.com, <another@osiem.osiem>>>> lalala@aaa.pl"
它将创建3个元素的列表。yfwxisqw10#
如果您正在读取文件,那么这可以帮助您
icnyk63a11#
怎么样
[^\\d]*([0-9]+[\\s]*[.,]{0,1}[\\s]*[0-9]*).*
我想它会处理分数部分的数字。我包括空格和,
尽可能使用分隔符。我试图从包含浮点数的字符串中提取数字,并考虑到用户在键入数字时可能会出错并包含空格。72qzrwbm12#
在java 1.4及更高版本中:
falq053o13#
听着,你可以用stringtokenizer
因为我们把这些数字数据分成三个不同的变量,所以我们可以在代码中的任何地方使用这些数据(供进一步使用)