替换字符串的第 n 个字符但忽略空格的最佳方法?

我试图找出替换字符串的第 n 个字符但在循环时忽略空格的最佳方法。例如,如果我将 String 的每 5 个字符更改mary had a little lambz,它应该返回mary zad azlittze lazb

我认为的一种方法是删除所有空格 ( maryhadalittlelamb),然后将所有第 5 个字符更改为zmaryzadazlittzelazb),然后引用原始字符串,找到的索引" "并将其插入maryzadazlittzelazb

但这似乎不是很优雅,我相信有更好的方法可以做到这一点,有人可以建议吗?


慕姐4208626
浏览 171回答 2
2回答

牧羊人nacy

我会使用String.toCharArray(),然后用常规for循环进行迭代并测试每个字符是否不是空格Character.isWhitespace(char)。如果不是,则增加第二个计数器(此处命名为p)并检查该值是否可以被 5 整除。如果是这样,请将其设置为z。最后,String根据编辑的char[]. 喜欢,String str = "mary had a little lamb";char[] arr = str.toCharArray();for (int i = 0, p = 0; i < arr.length; i++) {&nbsp; &nbsp; if (!Character.isWhitespace(arr[i]) && ++p % 5 == 0) {&nbsp; &nbsp; &nbsp; &nbsp; arr[i] = 'z';&nbsp; &nbsp; }}System.out.println(new String(arr));我得到(正如我在评论中提到的)mary zad a lzttle zamb另外,因为可能不是很清楚,所以if上面的复数等价于if (!Character.isWhitespace(arr[i])) {&nbsp; &nbsp; p++;&nbsp; &nbsp; if (p % 5 == 0) {&nbsp; &nbsp; &nbsp; &nbsp; arr[i] = 'z';&nbsp; &nbsp; }}

泛舟湖上清波郎朗

为了完整起见,我的建议如下所示:public static void main(String... args) {&nbsp; Pattern p = Pattern.compile("((\\S\\s*){4})\\S");&nbsp; Matcher m = p.matcher("mary had a little lamb");&nbsp; StringBuffer sb = new StringBuffer();&nbsp; while (m.find()) {&nbsp; &nbsp; m.appendReplacement(sb, "$1z");&nbsp; }&nbsp; m.appendTail(sb);&nbsp; System.out.println(sb.toString());&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java