Java替换String中的初始字符并保留长度
Posted
技术标签:
【中文标题】Java替换String中的初始字符并保留长度【英文标题】:Java replace initial characters in String and preserve length 【发布时间】:2020-12-04 09:36:29 【问题描述】:我正在寻找解决方案 (Java) 来用相同数量的其他字符替换最初出现的多个字符,例如,如果 'a' 应该替换为 '-',比我预期的要好:
aaabbaa -> ---bbaa
aaxxaab -> --xxaab
xaaaaax -> xaaaaax
我尝试过类似的方法:
"aaabbaa".replaceAll( "^[a]+", "-") // -bbaa
"aaabbaa".replaceAll( "(?=^[a]+)", "-") // -aaabbaa
如果可能,我更喜欢 regex 或 oneliner。
你有什么提示吗?
问候, 安妮
【问题讨论】:
【参考方案1】:Java 支持后视中的有限重复。您可以匹配一个断言,从字符串开头开始左侧的内容只是一个。
在替换中使用-
(?<=^a1,100)a
Regex demo | Java demo
例如
System.out.println("aaabbaa".replaceAll("(?<=^a0,100)a", "-"));
输出
---bbaa
【讨论】:
完美解决方案!我想,这也可以: "aaabbbaaa".replaceAll( "(? @AnnieW。我已经对其进行了测试,并且也可以使用 ideone.com/npPlMN 根据this page..for both correctness and performance, we recommend you only use quantifiers with a low upper bound in lookbehind with Java 6 through 13.
【参考方案2】:
如果使用 Java 9+,请使用 replaceAll
的 lambda 重载:
import java.util.regex.Pattern;
class Main
public static void main(String[] args)
String res = Pattern
.compile("^a+")
.matcher("aaabbb")
.replaceAll(m -> "-".repeat(m.group().length()));
System.out.println(res); // => ---bbb
【讨论】:
【参考方案3】:使用char[]
:
char[] cs = str.toCharArray();
for (int i = 0; i < cs.length && cs[i] == 'a'; ++i)
cs[i] = '-';
String newStr = new String(cs);
【讨论】:
同意。该条件停止 for 循环。但老实说:解决这个问题的方法太可怕了。以上是关于Java替换String中的初始字符并保留长度的主要内容,如果未能解决你的问题,请参考以下文章
java问题:String字符串替换部分空格,保留特定空格,如何做?
java中的string类中内容一旦被初始化就不能改变为啥还有replace方法呢?
java中怎么将字符串数组中的重复的元素去掉,但是还是保留一个。
java 替换文本中的所有指定的字符串,比如#*替换为sq, #**替换为we, 我使用了replaceAll进行的替换