繁体   English   中英

Java替换String中的每个第N个特定字符(例如空格)

[英]Java replace every Nth specific character (e.g. space) in String

我正在尝试学习正则表达式,下面的代码用下划线替换每个其他空格,但我试图替换每隔三个空格。

 String replace = deletedWords.replaceAll("(?<!\\G\\w+)\\s","_");

防爆。 我得到的结果是:“我已经把这个问题永远地困住了”

防爆。 输出我想要:“我永远忘记了这个问题”

你可以在积极的后卫中使用“最后一场比赛或一线开始”技巧:

String s = "I have been stuck on this problem forever quick brown fox jumps over";
String r = s.replaceAll("(?<=(^|\\G)\\S{0,100}\\s\\S{0,100}\\s\\S{0,100})\\s", "_");
System.out.println(r);

使用后视的不幸后果是您需要为匹配提供最大长度。 我使用{0,100}代替*{1,100}代替+ 如果您愿意,可以使用其他限制。

演示。

注意:存在固定限制的解决方法。 请参阅hwnd的 演示

你可以用这个:

String z = "I have been stuck on this problem forever quick brown fox jumps over";
String p = z.replaceAll("(\\s+\\S+\\s+\\S+)\\s+", "$1_");
System.out.println(p);

不需要测试连续性,因为字符串是从左到右解析的,因为字符(包括前两个空格)被消耗掉,所以最后的\\\\s+位置总是3的倍数。

第n个字符的更一般模式是:

((?:target all_that_is_not_the_target){n-1}) target

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM