编写一个字符浏览器,输入字符串以及需要查找的字符或字符串,浏览器自动定位所有出现该字符或字符串的位置
packagego;importjava.util.Scanner;publicclasshello3{publicstaticvoidmain(String[]args...
package go;
import java.util.Scanner;
public class hello3 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一段字符:");
String zfc=input.next();
System.out.println("请输入要查询的字符:");
String m=input.next();
int i;
for(i=0;i<zfc.length();i++){
i=zfc.indexOf(m);
System.out.println(i);
}
}
}
帮忙看下哪里错了 展开
import java.util.Scanner;
public class hello3 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一段字符:");
String zfc=input.next();
System.out.println("请输入要查询的字符:");
String m=input.next();
int i;
for(i=0;i<zfc.length();i++){
i=zfc.indexOf(m);
System.out.println(i);
}
}
}
帮忙看下哪里错了 展开
3个回答
展开全部
你程序中zfc.indexOf(m)用的不合适。
你的目的是找出所有出现的可能,而indexOf(String)的效果是从头查找,所以这个循环很有可能会无限进行下去。
你应该是找到一次出现后,就从这次出现的下一个位置继续找,这样才能找到所有出现,并且不会重复。
indexOf是个多态的函数,有一个形态就可以做到这样:从指定位置开始查找,而不是开头。
indexOf(int, String)
你的那个for循环应该修改成这样:
int i;
for(i=zfc.indexOf(m);i!=-1;i=zfc.indexOf(i+1,m)){
System.out.println(i);
}
注意,这里假定的是"222"可看做"22"+"2"也可看做"2"+"22"。
如果希望在"222"中只查到一个"22",则for循环为:
for(i=zfc.indexOf(m);i!=-1;i=zfc.indexOf(i+m.length(),m)){
你的目的是找出所有出现的可能,而indexOf(String)的效果是从头查找,所以这个循环很有可能会无限进行下去。
你应该是找到一次出现后,就从这次出现的下一个位置继续找,这样才能找到所有出现,并且不会重复。
indexOf是个多态的函数,有一个形态就可以做到这样:从指定位置开始查找,而不是开头。
indexOf(int, String)
你的那个for循环应该修改成这样:
int i;
for(i=zfc.indexOf(m);i!=-1;i=zfc.indexOf(i+1,m)){
System.out.println(i);
}
注意,这里假定的是"222"可看做"22"+"2"也可看做"2"+"22"。
如果希望在"222"中只查到一个"22",则for循环为:
for(i=zfc.indexOf(m);i!=-1;i=zfc.indexOf(i+m.length(),m)){
追问
你确定不会死循环? 还有indexOf里面可以放两个量吗?
追答
我汗....你看看API文档不就知道了?
展开全部
打个比方来看你这段代码
假如先输入一段字符串123456
再输入要查询的字符2
然后进入循环,当i为0时,进入循环体内,i=zfc.indexOf(m),此时i为1,然后将i加1,继续循环,又进入循环体内执行了一遍i=zfc.indexOf(m),i又变为1,那这个循环可就结束不了了,这就是问题所在。
可以利用Pattern和Matcher类——
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一段字符:");
String zfc = input.next();
System.out.println("请输入要查询的字符:");
String m = input.next();
Pattern p = Pattern.compile(m);
Matcher ma = p.matcher(zfc);
while (ma.find()) {
System.out.println(ma.start());
}
}
假如先输入一段字符串123456
再输入要查询的字符2
然后进入循环,当i为0时,进入循环体内,i=zfc.indexOf(m),此时i为1,然后将i加1,继续循环,又进入循环体内执行了一遍i=zfc.indexOf(m),i又变为1,那这个循环可就结束不了了,这就是问题所在。
可以利用Pattern和Matcher类——
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一段字符:");
String zfc = input.next();
System.out.println("请输入要查询的字符:");
String m = input.next();
Pattern p = Pattern.compile(m);
Matcher ma = p.matcher(zfc);
while (ma.find()) {
System.out.println(ma.start());
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-04-17
展开全部
import java.util.Scanner;
public class hello3 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一段字符:");
String zfc=input.next();
System.out.println("请输入要查询的字符:");
String m=input.next();
int i;
int z = 0;
for(i=0;i<zfc.length();i++){
z=zfc.indexOf(m);
}
z++;
System.out.println(z);
}
}
public class hello3 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一段字符:");
String zfc=input.next();
System.out.println("请输入要查询的字符:");
String m=input.next();
int i;
int z = 0;
for(i=0;i<zfc.length();i++){
z=zfc.indexOf(m);
}
z++;
System.out.println(z);
}
}
追问
这样,,, 好像只能输出最后一位出现的位置吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询