String =“9,3,5,*****,1,2,3”Java替换两个逗号之间的字符串
我想简单地访问两个逗号之间的“5” ,并在“*****”之前;那么只能将此“5”替换为其他值。
我怎么能在Java中做到这一点?
String =“9,3,5,*****,1,2,3”Java替换两个逗号之间的字符串
我想简单地访问两个逗号之间的“5” ,并在“*****”之前;那么只能将此“5”替换为其他值。
我怎么能在Java中做到这一点?
您可以尝试使用下面的正则表达式替换:
String input = "9,3,5,*****,1,2,3";
input = input.replaceAll("[^,]*,\\*{5}", "X,*****");
这里是正则表达式的解释:
[^,]*, match any number of non-comma characters, followed by one comma
\\*{5} followed by five asterisks
这意味着匹配任何CSV项加逗号来的五个星号前在你的字符串中。然后我们用你想要的和原始图案中的五颗星代替它。
演示在这里:
我的歉意,@Tim。我搞砸了,然后我们发生了冲突,很抱歉,我是不是真的想成为一个破坏者 –
非常感谢,但是你能否解释一下“\\ * {5}”?这是什么意思? – user815408
我认为中newstr是 “6”
String str = "9,3,5,*****,1,2,3";
char newstr = '6';
str = str.replace(str.charAt(str.indexOf(",*") - 1), newstr);
此外,如果你不知道有关IndexOutOfBoundException STR长度检查和处理它
你可以用spit()替换字符串
String str = "9,3,5,*****,1,2,3";
String[] myStrings = str.split(",");
String str1 = myStrings[2];
我想用一个正向表达式向前查找一个位于",*****"
之前的数字串,并用新值替换它。您正在寻找的正则表达式将是\d+(?=,\*{5})
- 即一个或多个数字,其中包含一个逗号和五个星号。所以,你会写
newString = oldString.replaceAll("\\d+(?=,\\*{5})", "replacement");
这里是在更换所使用的正则表达式的解释:
\\d+ match any numbers of digits, but only when
(?=,\\*{5}) we can lookahead and assert that what follows immediately
is a single comma followed by five asterisks
需要注意的是超前(?=,\\*{5})
断言,但不会消耗是非常重要的。因此,我们可以忽略它的替代。
thx。 \\ d +表示数字;而\\ * {5}表示五个星号。但我仍然对+(?=部分;这是什么意思?)表示怀疑? – user815408
你尝试过这么远吗? – arielnmz
没什么。我知道s.split; s.replace; s.substring;但我怎样才能先拆分然后替换? – user815408
你应该根据你所尝试的和你面临的问题来提问。你可以像这样使用正则表达式模式String pattern =“。*(\\ d),\\ * +”;并创建一个正则表达式模式r = Pattern.compile(pattern);现在匹配文本匹配器对象 Matcher m = r.matcher(text);如果在检查m.find()发现的任何内容后,mGroup(1)将包含您的值,则按捕获组进行分组。请阅读正则表达式和捕获组在java.Check这个问题https://stackoverflow.com/questions/17969436/java-regex-capturing-groups – RawAliasCoder