在尝试使用循环编写一个简单的java代码来替换给定字符串中的特定字符时,我很困惑地发现错误。详情如下:
INPUT String : "123qq11 1q1 11q1 1qq11 1q1 11q1"
REQUIRED OUTPUT: "123QQ11 1Q1 11Q1 1QQ11 1Q1 11Q1"
GOT OUTPUT: "Q23QQ11 1Q1 11Q1 1QQ11 1Q1 11Q1" as infinite loop
算法:在给定的字符串中用'Q'替换'q'。
我要纠正的代码是:
public class Rani {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("123qq11 1q1 11q1 1qq11 1q1 11q1");
int j = 0;
int i = 0;
while (i < sb.length()) {
while (i + 1 < sb.length()) { // while 2nd
i++;
if (sb.charAt(i) == 'q') {
j = i;
break;
} else {
break;
}
}
sb.replace(j, j + 1, "Q");
System.out.println(sb);
}
}
}
作为java和编程的新手,我无法管理更正。
答案 0 :(得分:4)
首先,循环时不需要2
。
其次i
永远停留在sb.length() - 1
,使其成为无限循环。
您可以改为使用replace
或replaceAll
。
String st = "123qq11 1q1 11q1 1qq11 1q1 11q1"
st = st.replace("q", "Q");
如果你想用while循环来做。
int i = 0;
while(i < sb.length())
{
if(sb.charAt(i) == 'q')
sb.setCharAt(i, 'Q');
i++;
}
答案 1 :(得分:4)
这是工作代码
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("123qq11 1q1 11q1 1qq11 1q1 11q1");
int j = 0;
int i = 0;
while (i < sb.length()) {
while (i < sb.length()) { // while 2nd
if (sb.charAt(i) == 'q') {
j = i;
break;
}
i++;
}
sb.replace(j, j + 1, "Q");
System.out.println(sb);
}
}
产出:123QQ11 1Q1 11Q1 1QQ11 1Q1 11Q1
答案 2 :(得分:3)
如果你不想使用替换,你可以这样做。
for (int i = 0; i < st.length(); i++)
if (st.charAt(i) == 'q')
st.setCharAt(i, 'Q');
答案 3 :(得分:3)
public static void main (String[] args) {
StringBuilder sb = new StringBuilder("123qq11 1q1 11q1 1qq11 1q1 11q1");
String strnew = "";
for(int i=0;i<sb.length();i++)
{
if(sb.charAt(i)=='q')
{
strnew=strnew+"Q";
}
else
strnew=strnew+sb.charAt(i);
}
System.out.println(strnew);
}
答案 4 :(得分:2)
告诉我过早增加。在内循环i
中,只有30,而长度实际为31.如果你将i++
移动到第一个循环的末尾但是我们的内循环它应该以你想要的方式工作。像这样:
...
if (sb.charAt(i) == 'q') {
j = i;
break;
}
i++;
}
...
唯一的问题是你总是替换字符串的第一个字符。第一个数字&#34; 1&#34;正被替换为&#34; Q&#34;。因为你使用j
来代替&#34; q&#34;它始终是第0个位置的角色。
你甚至可以使用一个循环来简化购买:
while (i<sb.length()){
if (sb.charAt(i) == 'q'){
sb.replace(i, i + 1, "Q");
}
i++;
}
System.out.println(sb);
或者您可以使用for循环:
for (i =0; i<sb.length();i++){
if (sb.charAt(i)=='q'){
sb.replace(i, i+1, "Q");
}
}
System.out.println(sb);