zoukankan      html  css  js  c++  java
  • Java思维题

    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 char find(String str){
    
          //存放重复的数据集合
          HashSet<Character> data = new HashSet<>();
          //存放不重复的数据集合
          List<Character> data1 = new ArrayList<>();
          for (int i = 0; i <str.length() ; i++) {
              //将 目标字符串 分割成 字符
              char c = str.charAt(i);
              //如果集合data中存在这个目标内容,跳出
              if(data.contains(c)){
                  continue;
              }
              //如果集合 data1 中 已经存在此目标内容,进行 移除 向 data集合中添加数值,否则继续向data1集合中添加
              if(data1.contains(c)){
                  data1.remove((Character) c);
                  data.add(c);
              }else{
                  data1.add(c);
              }
          }
    
          if(data1.size() >0 ){
              return data1.get(0);
          }else{
              return 0;
          }
    
      }
    

     第二题

    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 rotate1(String str){
          String result = "";
          String [] arr = str.split("");
          for(int i =0 ;i<arr.length; i++){
              //将数组里值转成ASCII码 65 - 90  大写26字母  97 - 122 小写字母
              if( arr[i].hashCode() >=65 && arr[i].hashCode()<=90 ){
                  int index1 = arr[i].hashCode();
                  if(index1 <= 78){
                      result += (char)(index1 + 13 );
                  }else{
                      result += (char)(index1 - 13 );
                  }
                  //65 =  A = N = 78
                  // 65 + 13 =78
              }else if( arr[i].hashCode() >=97 && arr[i].hashCode() <=122 ){
                  int index1 = arr[i].hashCode();
                  if(index1 <= 110 ){
                      result += (char)(index1 + 13 );
                  }else{
                      result += (char)(index1 - 13 );
                  }
              }else{
                  result +=arr[i];
              }
          }
          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;
        }
    
  • 相关阅读:
    线程操作共享变量的一点分享。
    C调用栈重温
    8051汇编命令记录。
    没事写个散列玩~
    Ubuntu切换root用户权限
    CEdit自动换行和状态栏添加
    基于原始套接字的嗅探器
    Windows录音API学习笔记
    Windows内存管理
    C语言中tm结构体
  • 原文地址:https://www.cnblogs.com/oukele/p/9726579.html
Copyright © 2011-2022 走看看