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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王先荣 中级黑马   /  2015-6-10 14:11  /  805 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

给定一个字符串,要求是将字符串中,第一次出现的字符变为大写,其他字母全是小写,不是字母的保持不变

14 个回复

倒序浏览
我的思路是 先找出第一出现字母是在什么位置,将位置字符变为大写,位置前面的直接substring 后面的在将字母变成小写再将三部分加在一起,我是不是考虑复杂了??
回复 使用道具 举报
  1. class Test{
  2.         public static void main(String[] args){
  3.                 String s="abd1Aca";
  4.                 System.out.println(function(s));

  5.         }
  6.         public static String function(String s){
  7.                 char[] ch=s.toCharArray();//将字符串转换成字符数组
  8.                 for(int x=0;x<ch.length;x++){
  9.                         Character c=ch[x];//将字符型元素转换成字符型包装类对象,以调用其方法
  10.                         if(Character.isLowerCase(c.charValue())){//判断字母是否是小写字母
  11.                                 int n=s.indexOf(c.charValue());//确定该字母在字符串中第一次出现的位置
  12.                                 if(x>n)//如果在数组中的位置大于在字符串中第一次出现的位置,则不是第一次出现,继续判断下一个字母。
  13.                                         continue;
  14.                                 else{
  15.                                         char[] temp=c.toString().toUpperCase().toCharArray();//如果是第一次出现将字符对象转换成String类型对象调用其方法变成大写,并转换成单字符对象元素的字符数组,
  16.                                         ch[x]=temp[0];//将小写改为大写。
  17.                                 }       
  18.                         }
  19.                 }
  20.                 return new String(ch);
  21.         }
  22. }
复制代码
回复 使用道具 举报
c.charValue()可以直接用ch[x]代替,我转来转去转晕了,写的繁琐了。:L
回复 使用道具 举报
写了个不用大小写转换方法的类。完美实现。。。
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 String s = "23ab1G2h5D2Ty";
  4.                 capitalize(s);
  5.         }

  6.         /**
  7.          * 首字母转换函数
  8.          * @param s 传入的字符串
  9.          */
  10.         public static void capitalize(String s) {
  11.                 char[] ch = s.toCharArray();// 转字符数组
  12.                 boolean isFirst = true;// 初始化是否首次出現
  13.                 for (int i = 0; i < ch.length; i++) {
  14.                         if (isFirst && ch[i] >= 'a' && ch[i] <= 'z') {
  15.                                 ch[i] -= 'a' - 'A';// 不用函数转大写
  16.                                 isFirst = false;
  17.                         } else if (ch[i] >= 'A' && ch[i] <= 'Z') {
  18.                                 ch[i] += 'a' - 'A';// 不用函数转小写
  19.                         }
  20.                 }
  21.                 String s2 = new String(ch);// 转回字符串
  22.                 System.out.println(s2);
  23.         }
  24. }
复制代码
回复 使用道具 举报
用String中的toUpperCase()和toLowerCase()
回复 使用道具 举报
world.net 发表于 2015-6-10 15:31
c.charValue()可以直接用ch[x]代替,我转来转去转晕了,写的繁琐了。

非常同意 我晕了:dizzy:
回复 使用道具 举报
雪域星辰 发表于 2015-6-10 16:46
写了个不用大小写转换方法的类。完美实现。。。

感觉酷酷的
回复 使用道具 举报
雪域星辰 发表于 2015-6-10 16:46
写了个不用大小写转换方法的类。完美实现。。。

如果第一个字母不是小写就是大写怎么办啊
回复 使用道具 举报
楼上代码可以解决
回复 使用道具 举报

:victory:我看了底下的代码,看来我似乎理解错你的题意了,你是要让字符串中第一个出现的字母是大写,其他字母都是小写是吧。我以为是让字符串中重复出现的字母,第一次出现是大写,之后出现全小写呢,想复杂了。
回复 使用道具 举报
slj900926 来自手机 中级黑马 2015-6-11 17:55:55
12#

感觉酷酷的
回复 使用道具 举报
学习学习
回复 使用道具 举报
王先荣 发表于 2015-6-11 15:45
如果第一个字母不是小写就是大写怎么办啊

嗯。针对你说的这种情况我又稍微修改了一下。。。是不是这个意思
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 String s1 = "23ab1G2h5D2Ty";
  4.                 String s2 = "23Ab1G2h5D2Ty";
  5.                 capitalize(s1);
  6.                 capitalize(s2);
  7.         }

  8.         /**
  9.          * 首字母转换函数
  10.          * @param s 传入的字符串
  11.          */
  12.         public static void capitalize(String s) {
  13.                 char[] ch = s.toCharArray();// 转字符数组
  14.                 int count = 0;// 大写字母出现次数
  15.                 for (int i = 0; i < ch.length; i++) {
  16.                         if (count == 0 && ch[i] >= 'a' && ch[i] <= 'z') {
  17.                                 ch[i] -= 'a' - 'A';// 转大写
  18.                                 count = 1;
  19.                         } else if (ch[i] >= 'A' && ch[i] <= 'Z') {
  20.                                 if (count > 0) {
  21.                                         ch[i] += 'a' - 'A';// 转小写
  22.                                 }
  23.                                 count++;
  24.                         }
  25.                 }
  26.                 String res = new String(ch);// 转回字符串
  27.                 System.out.println(res);
  28.         }
  29. }
复制代码

点评

对 要的就是这个效果  发表于 2015-6-12 14:36
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马