字符串-面试题
  ZTo294hNoDcA 5天前 35 0

String 的不可变性

  • String底层是一个 final修饰的字符数组,当改变String的值时,会在常量池生成新的字符串,字符数组的地址指向常量池中新的字符串

StringBuffer的扩容原理


String、StringBuffer、StringBuilder三者对比

  • Strings是不可变的字符序列,底层是一个final修饰的字符数组。每次值改变时,会在常量池都会创建新的字符串

  • StringBuffer和StringBuilder时可变的字符序列,底层是一个字符数组存储数据。

    StringBuffer的初始化长度是16。当长度达到16时,会扩容为原长度的2倍+2,

    并且调用Arrays.copyOf( )方法,将原字符数组的元素,复制到新的数组中

  • StringBuilder是线程安全的,StringBuilder是线程不安全的。


对字符串的指定部分进行反转

public String reverse(String str,int startIndex,int endIndex){
  //双指针 操作 字符数组
  char[] chars = str.toCharArray();
  for (int x = startIndex,y=endIndex; x<y; x++,y--) {
      char temp=chars[x];
      chars[x]=chars[y];
      chars[y] = temp;
  }
  return new String(chars);
}

获取一个字符串在另一个字符串中出现的次数

String str = "ababkkcadkabkebfabkabkskabab";
String regStr="ab";

int subLength=regStr.length();
int count = 0;
int index=0;

while((index=str.indexOf(regStr,index))!=-1){
    count++;
    index += subLength;
}

获取两个字符串中最大的相同子字符串

/*
思路分析:
      最大公约数:从最大子串开始找
      双指针操作
*/
public String getMaxSameString(String str1,String str2){
  //判断两个字符串的长度
  String maxStr = (str1.length() >= str2.length()) ? str1 : str2;
  String minStr = (str1.length() < str2.length()) ? str1 : str2;
  //外层循环的次数
  int len = minStr.length();

  for (int i = 0; i < len; i++) {
      for (int x = 0,y=len-i;y<=len ;x++,y++ ) {
          String subStr = minStr.substring(x,y);
          if(maxStr.contains(subStr)){
              return subStr;
          }
      }
  }
  return null;
}

StringBuffer 对 null值的处理


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 5天前 0

暂无评论

推荐阅读
  FHUfYd9S4EP5   2天前   20   0   0 Java
  sSh3rBaiME5f   3天前   23   0   0 Java
  qCe06rFCa8NK   2天前   15   0   0 Java
  ZTo294hNoDcA   2天前   22   0   0 Java
  FHUfYd9S4EP5   2天前   16   0   0 Java
  QGiRIwDaZAe8   3天前   20   0   0 Java