1. 程式人生 > >Java思維題

Java思維題

不為 目標 += equals you null boolean for -s

1、求取字符串中出現的第一個非重復字符。

   比如: "hello" 中的 h, "hello, how r you?" 中的 e

2、使用26字符母實現加密

   比如: StringUtil 加密後的結果為 FgevatHgvy,Hello 加密的結果為 Uryyb

3、翻轉一個字符串

  比如:“你好啊!” 翻轉成 "!啊好你"

4、檢查一個字符串是否為空(包括 null 的判斷)

實現方法(個人想法):

第一題

   //第一種實現方式 
  public String getIsStr(String str){
        String[] arr = str.replaceAll("\\s","").split("");
        for (int i = 0; i <arr.length ; i++) {
            if( str.lastIndexOf(arr[i]) ==  str.indexOf(arr[i])  ){
                return  arr[i].toString();
            }
        }
        return "";
    }
  //第二種實現方式
  String str ="hello, how r you?";
  String  liststr = str.replaceAll("[^a-zA-Z]","");
  String[] listarr = str.split("");
  for (int i = 0; i <listarr.length ; i++) {
      boolean flag = true;
      for (int j = i+1 ;j<listarr.length ;j++){
          if(listarr[i].equals(listarr[j])){
             flag = false;
             continue;
          }
      }
      if (flag){
          System.out.println(listarr[i]);
          break;
      }
  }

第二題

    public String rotate(String str){
        // 接收結果的變量
        String result ="";
        //"a","b","c","d","e","f","g","h","i","j","k","l","m"
        //"n","o","p","q","r","s","t","u","v","w","x","y","z"
        //大小寫字符數組
        String [] lower = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
        String [] upper = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

        //將 目標字符串 去掉 裏面一些符號 並且 分割
        String []  arr = str.replaceAll("\\s","").split("");

        for (int i = 0; i <arr.length ; i++) {
            //將目標值都跟 小寫字符數組 對一遍  當目標值等於 lower裏 相對應的值時, 使用一個小算法
            for (int j = 0 ; j < lower.length; j++) {
                if( arr[i].equals(lower[j]) ){
                    //  比如 當  目標值 是 a  那麽通過計算 得到將是 lower數組的 u
                    result +=lower[(j + 13)%26];
                }
            }
            //將目標值都跟 大寫字符數組 對一遍  當目標值等於 upper裏 相對應的值時, 使用一個小算法
            for (int k = 0; k <upper.length ; k++) {
                if( arr[i].equals(upper[k]) ){
                    //  比如 當  目標值 是 A  那麽通過計算 得到將是 lower數組的 U
                    result +=upper[(k + 13)%26];
                }
            }
        }
        return result;
    }

第三題

  //第一種方式
  public String reverse(String str){
        //將字符 分割成 字符數組
        String [] arr = str.split("");
        //獲取 字符數組的長度
        int size = arr.length;
        //拿一個結果變量來接收
        String result = "";
        //循環
        for (int i = 0; i <arr.length ; i++) {
            // 倒取 數組的值 賦予 結果變量
            result += arr[ --size];
        }
        return result;
    }
  //第二種方式

  public String reverse1(String str){
      StringBuilder result =new StringBuilder(str);
      return result.reverse().toString();
  }

第四題

   public boolean isEmpty(String str){
        //字符串對象和字符串變量這兩個概念的區別
        //字符串變量保存一個字符串對象的引用
        //判斷字符串是否空涉及兩個層次
        //1、首先判斷字符串變量的引用是否為空,即空對象的概念,用null來判斷,可以用== null;(註意不能用equals(null),在參數為null情況下,返回值永遠是false)
        //2、是在不為空對象的情況下,在判斷字符串對象是否為空串,即長度為0.用length()==0
        if(!( str == null ||str.length() == 0)){
            return true;
        }
        return false;
    }

Java思維題