关于String常用方法的小练习

(01号表示我自己设计的,02号表示老师设计的)

1.设计一个方法 将字符串反转 ok–>ko

01

//1.设计一个方法 将字符串反转   ok-->ko
   public String reverseStr(String str){
       String newStr = "";
       for (int i = str.length()-1;i>=0;i--){
           //newStr+=str.charAt(i);
           newStr = newStr.concat(""+str.charAt(i));
       }
       return newStr;
   }

02

执行效率更高:

  public String reverse(String str){
      char [] value = str.toCharArray();
      for (int i = 0;i<value.length/2;i++){
          char temp = value[i];
          value[i] = value[value.length-1-i];
          value[value.length-1-i] = temp;
      }
      return new String(value);
  }

或者使用StringBuilder中自带的reverse方法:

  public String reverse2(String str){
      return new String(new StringBuilder(str).reverse());
  }

2.设计一个方法 将给定字符串的正序和反序进行连接 ok–>okko

//2.设计一个方法 将给定字符串的正序和反序进行连接  ok-->okko
   public String conObverAndRever(String str){
       String newStr = this.reverseStr(str);
       return str.concat(newStr);
   }

3.设计一个方法 判断给定字符串是否是回文 abccba abcba

01

//3.设计一个方法 判断给定字符串是否是回文    abccba   abcba
   public boolean isPlalindrome(String str){
       char[] charStrs = str.toCharArray();
       for (int i = 0;i<charStrs.length/2;i++){
           if (charStrs[i] != charStrs[charStrs.length-1-i]){
               return false;
           }
       }
       return true;
   }

02

  public boolean isPlalindrome2(String str){
      //传递进来的str先反转
      //用Str与反转之后的字符串进行比较
      //如果完全一致,证明是回文
      if (this.reverse(str).equals(str)){
          return true;
      }
      return false;
  }

4.设计一个方法 将给定的字符串右位移x位置 (helloworld,2) --> ldhellowor

01

  //4.设计一个方法 将给定的字符串右位移x位置  (helloworld,2) --> ldhellowor
  public String rightDisplacement(String str,int displacement){
      //左位移:String newStr = str.substring(displacement).concat(str.substring(0,displacement));
      String newStr = str.substring(str.length()-displacement).concat(str.substring(0,str.length()-displacement));
      return newStr;
  }

02

自定义异常:

public class InvalidCountException extends RuntimeException {
    public InvalidCountException(){}
    public InvalidCountException(String msg){
        super(msg);
    }
}

多了两个判断:

  public String moveToRight(String str,int count) {
      if (count<0){
          //这个方法如果只用来做右位移,如果count为负数
          //,后面执行subString截取的时候,必然报异常:StringIndexOutOfBoundsException
          //我们不妨自定义一个异常
          throw new InvalidCountException("count cannot be negative : "+count);
      }
      if (count>str.length()){
          count %= str.length();
      }
      //截取
      //前半部分
      String begin = str.substring(0,str.length()-count);
      //后半部分
      String end = str.substring(str.length()-count);
      //拼接后返回
      return end.concat(begin);
  }

5.设计一个方法 寻找若干字符串中最长的那个 ab,abc,abcd—>abcd

01

//5.设计一个方法 寻找若干字符串中最长的那个  ab,abc,abcd--->abcd
   public String retuMaxStr(String[] strArr){
       int maxLen = 0;
       String maxStr = "";
       for(int i = 0;i<strArr.length;i++){
           if(maxLen<strArr[i].length()){
               maxLen = strArr[i].length();
           }
       }
       for (String s:strArr){
           if (s.length()==maxLen){
               maxStr = s;
               break;
           }
       }
       return maxStr;
   }

02

使用动态参数列表,它的底层还是数组,但它的好处在于,不传参数也行。
代码更优化:

 public String findMaxLengthStr(String... strs){
     String result = strs[0];
     int maxLen = strs[0].length();//第一个字符串的长度
     for (int i = 1;i<strs.length;i++){
         if (maxLen<strs[i].length()){
             maxLen = strs[i].length();
             result = strs[i];
         }
     }
     return result;
 }

6.设计一个方法 统计给定字母在字符串中出现的次数 “this is a test of java”,“a”—>3

一般思路:

//6.设计一个方法 统计给定字母在字符串中出现的次数   "this is a test of java","a"--->3
   public int letterExistCount(String str,char letter){
       int count = 0;
       for (int i = 0;i<str.length();i++){
           if (str.charAt(i)==letter){
               count++;
           }
       }
       return count;
   }

巧妙思路:

不用循环,直接用replace()方法把字母替换为空串,替换了几次,就证明有几个这样的字母,字符串长度就少几。

  public int letterExistCount2(String str,char letter){
      return str.length()-str.replace(String.valueOf(letter),"").length();
    }

7.设计一个方法 将给定的字符串每一个首字母大写 “this is a test of java”—>“This Is A Test Of Java”

01

  //7.设计一个方法 将给定的字符串每一个首字母大写   "this is a test of java"--->"This Is A Test Of Java"
  public String title(String str){
      String [] sArr = str.split(" ");
      String newStr = "";
      for (int i = 0;i<sArr.length;i++){
          String pre = sArr[i].charAt(0) + "";
          String up = pre.toUpperCase();
          newStr = newStr.concat(up).concat(sArr[i].substring(1)).concat(" ");
      }
      return newStr;
  }

02

  public String firstLetterToUpperCase(String str){
      String result = "";//最终拼接完整字符串
      //将完整的字符串按照空格拆分成好多单词  split
      String[] value = str.split(" ");
      //循环处理每一个单词  截取首字母-->大写  截取其余的字母   整体拼接
      //每一次的单词拼接成一个完整的字符串 返回  a.append(b)
      for(int i=0;i<value.length;i++){
          String word = value[i];//获取每一个单词
          String firstLetter = word.substring(0,1).toUpperCase();//首字母截取 变大写
          String otherLetters = word.substring(1);//其余的其他字母
          result = result.concat(firstLetter.concat(otherLetters)+" ");//注意String的不可变特性
      }
      return result.trim();//去掉最后多余的那个空格
  }

8.设计一个方法 获取给定字符串中的全部数字 “za1o1zbp24tcq”—>1124

01

   //8.设计一个方法 获取给定字符串中的全部数字   "za1o1zbp24tcq"--->1124
  public int getNumInStr(String str){
      String numStr = "";
      //unicode中数字0-9对应的是48-57
      for (int i = 0;i<str.length();i++){
          if(48<=str.charAt(i)&& str.charAt(i)<=57){
              numStr = numStr.concat(str.charAt(i)+"");
          }
      }
      return Integer.parseInt(numStr);
  }

02

 public int findNumber(String str){
     String result = "";
     //循环找寻字符串中的每一个 字符
     //判断当前找到的字符是否是  数字  '0'---'9'   48--57
     for(int i=0;i<str.length();i++){
         int code = str.codePointAt(i);//每一个字符对应的code码
         if(code>=48 && code<=57){
             result += (char)code;
         }
     }
     //将找到的数字返回
     return Integer.parseInt(result);//int value = new Integer(result);
 }

9.设计一个方法 统计给定子串在字符串中出现的次数 “this is a test of java”,“this”—>1### 一般思路:

利用replaceAll

    /**
     *
     * @param str 字符串
     * @param sub 子串
     * @return
     */
    public static int subInStrcount(String str,String sub){
        return (str.length()-str.replaceAll(sub,"").length())/sub.length();
    }

利用indexOf

indexOf只会返回字符串时的下标索引,不会像replaceAll对字符串做替换的操作,个人感觉它的效率更高。

    public static int countSubInStr(String str,String sub){
        int count = 0;
        int indexOf = str.indexOf(sub);
        while (indexOf != -1){
            count++;
            indexOf = str.indexOf(sub,indexOf+sub.length());
        }
        return count;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值