字符串-面试题

cnblogs 2024-09-13 17:09:00 阅读 90

字符串的相关面试题

String 的不可变性

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

StringBuffer的扩容原理


String、StringBuffer、StringBuilder三者对比

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

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

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

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

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


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

<code>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";code>

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值的处理




声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。