Java作业求助:交替替换指定字符功能异常,始终返回原字符串
解决字符串下划线替换为交替
的问题return (<I>和</I>)
首先,你的代码始终返回原字符串,核心问题出在下划线数量的判断逻辑上,还有代码片段看起来没写完(while(temp.contains("..."))这部分明显不对)。我来一步步帮你修正:
问题1:运算符优先级导致判断错误
你现在的判断条件:
if(temp.length() - temp.replace("_", "").length() % 2 == 0)
这里%的优先级比-高,所以实际执行顺序是先计算temp.replace("_", "").length() % 2,再用原长度减去这个结果,这完全不是在判断下划线数量是否为偶数。正确的做法是把计算下划线总数的部分用括号括起来:
int underlineCount = temp.length() - temp.replace("_", "").length(); if(underlineCount % 2 == 0)
这样才能准确判断下划线数量是不是偶数。
问题2:替换逻辑的缺失
你的代码里while(temp.contains("..."))明显是写错了,应该是循环替换下划线为交替的<I>和</I>。这里可以用一个标记变量来控制当前应该替换成开标签还是闭标签,比如用一个布尔值isOpenTag,初始为true,每替换一次就反转标记。
完整修正后的代码
public String convertItalics() { String temp = line; // 计算下划线的总数 int underlineCount = temp.length() - temp.replace("_", "").length(); // 如果数量为奇数,直接返回原字符串 if (underlineCount % 2 != 0) { return line; } // 偶数的话开始交替替换 boolean isOpenTag = true; // 循环替换每一个下划线 while (temp.contains("_")) { if (isOpenTag) { temp = temp.replaceFirst("_", "<I>"); } else { temp = temp.replaceFirst("_", "</I>"); } // 切换标签类型 isOpenTag = !isOpenTag; } return temp; }
测试示例
- 输入字符串:
Hello_World_Java_(4个下划线,偶数),会被替换成Hello<I>World</I><I>Java</I> - 输入字符串:
Hello_World_Java(3个下划线,奇数),会直接返回原字符串
额外说明
- 用
replaceFirst是因为每次只替换第一个出现的下划线,这样才能交替切换标签;如果用replace会一次性把所有下划线换成同一个标签,不符合要求。 - 先判断下划线数量奇偶性,避免做无用的替换操作,提升效率。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

