A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package test;
public class ChaZhao {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  String s="nbsjienbslesnbssdlafjnsdnb";
  int count =0;
  if((s.charAt(s.length()-2)!='n'&&s.charAt(s.length()-1)!='b')||s.charAt(s.length()-2)!='n'){
   for(int i=0;i<s.length();i++){
     if(s.charAt(i)=='n'){
      if(s.charAt(i+1)=='b'){
       if(s.charAt(i+2)=='s'){
        count++;
       }
      
      }
     }
    }
  }
  System.out.println(count);
}
}
这个大字符串末尾处不能是一半的特定字符,如果

10 个回复

倒序浏览

回帖奖励 +1

不错不错,有点意思
回复 使用道具 举报
没有说清楚,试试看这个
  1.                 if ((s.charAt(s.length() - 2) == 'n' && s.charAt(s.length() - 1) == 'b')
  2.                                 || s.charAt(s.length() - 2) == 'n') {
  3.                         for (int i = 0; i < s.length()-2; i++) {
  4.                                 if (s.charAt(i) == 'n') {
  5.                                         if (s.charAt(i + 1) == 'b') {
  6.                                                 if (s.charAt(i + 2) == 's') {
  7.                                                         count++;
  8.                                                 }

  9.                                         }
  10.                                 }
  11.                         }
  12.                 }
复制代码
回复 使用道具 举报
以下代码测试可用,函数返回目标字符串在原始字符串中第一次出现的位置,没有找到则返回-1.
  1. class SearchString
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String str="nbsjienbslesnbssdlafjnsdnb";
  6.                 System.out.println(search(str,"bs"));
  7.         }
  8.        
  9.         public static int search(String strSource,String strTarget)
  10.         {
  11.                 boolean flag =true;
  12.                 for(int i=0;i<strSource.length();i++)
  13.                 {
  14.                         if(strSource.charAt(i)==strTarget.charAt(0))//外层循环先在原始字符串中找到与目标相同的第一个字符串
  15.                         {
  16.                                 for(int j=1;(j<strTarget.length())&&flag;j++)//找到之后再循环目标字符串进行比较
  17.                                 {
  18.                                         if(strSource.charAt(i+j)!=strTarget.charAt(j))//如果有不一样的说明不是满足条件的位置,停止内部循环
  19.                                         {
  20.                                                 flag=false;;
  21.                                         }
  22.                                 }
  23.                                 if(flag)//退出循环之后如果flag的值为true,则说明当前脚标开始的字符串和目标字符串匹配。
  24.                                 {
  25.                                         return i;
  26.                                 }
  27.                                 else
  28.                                 {
  29.                                         flag=true;//没有找到的话让循环继续执行
  30.                                 }
  31.                         }
  32.                 }
  33.                 return -1;//如果正常退出则说明没有找到合适的,反回-1.如果找到了则有return i返回合适的脚标!
  34.         }
  35. }
复制代码
回复 使用道具 举报
dengzhenyu 发表于 2015-9-9 23:02
以下代码测试可用,函数返回目标字符串在原始字符串中第一次出现的位置,没有找到则返回-1.
...

这是我一行一行代码敲得,还可以改进!这个改进就留个楼主自己考虑吧!共同学习,共同提高!
回复 使用道具 举报
没有注释看着头晕,虽然我也不写注释...
回复 使用道具 举报
不错不错,有点意思
回复 使用道具 举报
姜群 中级黑马 2015-9-10 19:09:00
8#
dengzhenyu 发表于 2015-9-9 23:02
以下代码测试可用,函数返回目标字符串在原始字符串中第一次出现的位置,没有找到则返回-1.
...

我想说,我后来也是这么想的,然后想到了,这样的话,大字符串每个取值都要从小的开始找,从头到尾要都一样才可以,如果小字符串不是定值的话,不是小字符串每个值都要和大的比较一次,然后在最外层再来个循环,这样的话,我就已经蒙了,
回复 使用道具 举报
姜群 中级黑马 2015-9-10 20:17:24
9#
dengzhenyu 发表于 2015-9-9 23:04
这是我一行一行代码敲得,还可以改进!这个改进就留个楼主自己考虑吧!共同学习,共同提高! ...

好的,我也在考录这个代码,还有俩种方法,但是就是想把这个方法搞出来
回复 使用道具 举报
新手入过
回复 使用道具 举报
不错哟 学习了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马