java查找一个字符串2在字符串1中第一次出现的位置

/*查找一个字符串2在字符串1中第一次出现的位置
比如:输入  asdfwd   df   输出为  3
输入  hhff  hf  输出为  2

*/



import java.util.Scanner;


public class SearchChar {

public static void main(String[] args){
int count=0;//标记是否完全相同,如果完全相同,则加1,否则为0
int log=0;//标记已有多少位相同
int x=0;//标记完全匹配时,这个字母在第一个字符串中的位置


             //接收两个字符串
Scanner input=new Scanner(System.in);
String str=input.next();
String str1=input.next();
             //将字符串转换为字符数组
char[] ch=str.toCharArray();
char[] ch1=str1.toCharArray();


             //重点来了!!!进行字符数组的比较
loop:for(int n=0;n<str.length();){//循环长数组
for(int i=0;i<str1.length();i++){//循环短数组
if(ch1[i]==ch[n]){//如果两个字符相同,则log加1,
log++;
if(log==1){//并标记下此字符在长字符数组内的位置
x=n;
}
if(log==str1.length()){//如果完全匹配,则,count加1,log置为0,跳出内层循环,并继续比下面的
             count++;
             log=0;
             break loop;//如果是求题上的要求,即求第一次完全匹配时,第一个匹配的位置,则在此跳出外层循环
             //break;   //如果是求长字符串中一共含有多少个短字符串,则只跳出内层循环        

}else if(log!=0){//如果之前的有相同的,但是当前位不匹配,
n=x;         //那么将长字符数组的位置置为第一个相同的字母位置,    长字符串hhff  短字符串 hf    不进行该操作上述两个字符串就要计算错误
x=0;         //将标记第一个相同位置的标记,置为0,
log=0;      //连续相同字母数的标记置为0
break;      //并跳出内层循环,即从短数组的第一个元素开始
}else{          //如果 不相同,则跳出内循环,
x=0;        //相同的第一个字符标记为0
break;
}
if(n<str.length()-1){//判断外层循环是否越界,   长字符串asdfg    短字符串  sdfgh  不判断上述的就会越界
n++;
}else{
break;
}
}
n++;
}
if(count>0){//判断完全匹配次数
System.out.println(x+1);//有过匹配,
//System.out.println(count);//输出的是完全相同的次数
}else{
System.out.println(x);//没有过匹配,
//System.out.println(count);//输出的是完全相同的次数
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值