给定字符串
// 1 2 3
String a = "letters.1223434.more_letters";
我想知道在第一个点之后数字位于第二位
然后我想利用这些知识取代“第二位”
// 1 2 3
String b = "someWords.otherwords.morewords";
用“你好”来有效地制作
// 1 2 3
String b = "someWords.hello.morewords";
必须根据String a中匹配元素的原始位置进行替换
如何使用正则表达式来完成?
最佳答案 要查找这些数字,您可以使用组机制(常规表达式中的圆括号):
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
但如果您的目标只是在两个点之间替换文本,请尝试在String对象上使用replaceFirst(String regex,String replacement)方法:
//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
正则表达式告诉搜索两个点之间的所有字符(包括这些点),因此替换应该是“.hello”. (带点).
如果你的String有更多的点,它将替换第一个和最后一个点之间的所有字符.如果您希望正则表达式搜索满足模式所需的最少字符数,则需要使用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