为了找到这些数字,您可以使用组机制(正则表达式中的圆括号):
import java.util.regex.*;
...
String data = "letters.1223434.more_letters";
String pattern="(.+?)\\.(.+?)\\.(.+)";
Matcher m = Pattern.compile(pattern).matcher(data);
if (m.find()) //or while if needed
for (int i = 1; i <= m.groupCount(); i++)
//group 0 == whole String, so I ignore it and start from i=1
System.out.println(i+") [" + m.group(i) + "] start="+m.start(i));
// OUT:
//1) [letters] start=0
//2) [1223434] start=8
//3) [more_letters] start=16
但是,如果您的目标只是替换两个点之间的文本,请尝试replaceFirst(String regex, String replacement)
使用 String 对象上的方法:
//find ALL characters between 2 dots once and replace them
String a = "letters.1223434abc.more_letters";
a=a.replaceFirst("\\.(.+)\\.", ".hello.");
System.out.println(a);// OUT => letters.hello.more_letters
regex
告诉搜索两个点之间的所有字符(包括这些点),所以replacement
应该是“.hello”。(带点)。
如果您的字符串将有更多点,它将替换第一个和最后一个点之间的所有字符。如果您希望正则表达式搜索满足模式所需的最少字符数,您需要使用 Reluctant Quantifier ->?
像:
String b = "letters.1223434abc.more_letters.another.dots";
b=b.replaceFirst("\\.(.+?)\\.", ".hello.");//there is "+?" instead of "+"
System.out.println(b);// OUT => letters.hello.more_letters.another.dots