Java oj## 162 - 字符串

**

162 - 字符串

**

Description
对于输入字符串s(假设字符串只包含字母构成的单词和空格),完成如下功能:

  1. 统计该字符串中字母c出现的次数
  2. 求该字符串的逆
  3. 输出该字符串中子串str的所有位置(无需考虑子串叠加现象)
  4. 将字符串中每个单词的第一个字母变成大写并输出
    Input
    字符串s
    字母c
    子串str
    Output
    c在s中出现的次数
    s的逆
    str在s中的所有位置
    所有单词首字母大写后的字符串
    Sample Input
    I scream you scream we all scream for icecream
    m
    eam
    Sample Output
    4
    maerceci rof maercs lla ew maercs uoy maercs I
    5 16 30 43
    I Scream You Scream We All Scream For Icecream

以下是我的代码:

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
         Scanner input = new Scanner(System.in);
         String s = input.nextLine();    *//待输入字符串*
         String letter = input.nextLine();
         char c = letter.charAt(0);      /*/待输入字母,因为Java中没有直接读取单个字符的函数,
        								 //所以将字母输入到字符串中,调用String中的charAt()函数
        								 //取第一个字符即为我们想要输入的单个字符*
        								 
         String str = input.nextLine();  *//待输入子串*
         
         int times = 0;                        *//字母出现的次数;*
         for(int i=0;i<s.length();i++) {    *//遍历字符串,求出字符串中字符c出现的次数*
        	 if(s.charAt(i)==c)
        		 times++;
         }
         System.out.println(times);
         String rs = new StringBuilder(s).reverse().toString();  *//利用StringBuilder中的reverse()函数
         														//求字符串的反转字符串,并转换成String类型
         														//赋值给re;*
         System.out.println(rs);
         //StringBuilder scpy = new StringBuilder(s);
         int pos = s.indexOf(str);		*//indexOf()函数,查找并返回出子串str第一次出现的位置*
         boolean flag = true;
         while(pos!=-1) {				*//String中的查找函数indexOf()查找不成功时返回-1;*
        	 if(flag) {					*//当查找成功是,输出该位置,并从该位置之后再次查找*
        		 System.out.print(pos);*//直到字符串中查找不到该字串*
        		 flag = false;   	  *//flag帮助控制输出的格式*
        	 }//if
        	 else
        		 System.out.print(" "+pos);
        	 pos = s.indexOf(str, pos+str.length());
         }//while
         System.out.println();
         StringBuilder uppers = new StringBuilder();
         for(int i = 0;i < s.length();i++)          *//for循环实现s字符串中的每个单词首字母大写*
         {											
        	 if(i==0)	*//如果i=0,说明是字符串的第一个字符,需要大写*
        		 uppers.append(Character.toUpperCase(s.charAt(i))); 
        		 		 *//appen(char c)函数,在字符串末尾插入一个字符c
        		 		 //toUpperCase(char c)函数是Wrapper类Character中
        		 		 //的静态函数,作用是将字符c转换成大写*
        	 else {
        		 if(s.charAt(i-1)==' ')		*//如果字符串中i位置之前的字符为空格,说明i位置的字符是
        		 							//单词的开头,那么就将i位置的字符换成大写,插入到uppers中*
        			 uppers.append(Character.toUpperCase(s.charAt(i)));
        		 else			*//最后一种情况,即i位置的字符既不是字符串的开头也不是单词
        		 				//的开头,那么就直接插入到uppers中*
        			 uppers.append(s.charAt(i));
        	 }//else
         }//for
         s = uppers.toString();   *//将指向s引用指向完成首字母大写的字符串*
         System.out.println(s);
    }
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值