常见算法题目的考查:
1)模拟一个trim方法,去除字符串两端的空格。
2)将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反转为”abfedcg”
package com.atguigu.exer;
import org.junit.Test;
/**
* 2.将一个字符串进行反转。将字符串中指定部分进行反转。
* 比如将“ab cdef g”反转为”ab fedc g” 2-5
*
* @author WanZi
* @create 2021-09-18 12:12
*/
public class StringDemo {
//方式一:转换为char[] 字符数组 start:2,end:5
public String reverse1(String str, int start, int end) {
if (str != null && str.length() != 0) {
//字符串--->char[]:toCharArray()
char[] arr = str.toCharArray();
//对数组进行反转
for (int i = start, j = end; i < j; i++, j--) {
char temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//返回String
return new String(arr);
}
return null;
}
//方式二:使用String拼接操作 不变+变+不变 start:2,end:5
public String reverse2(String str, int start, int end) {
if (str != null && str.length() != 0) {
//第一部分 从0开始到start[ 0,2 ) ab
String reverseStr = str.substring(0, start);
//第二部分 从后往前取 start:2,end:5
for (int i = end; i >= start; i--) {
reverseStr += str.charAt(i);//ab + f/e/d/c charAt指定i位置上的元素
}
//第三部分 ab + f/e/d/c + g(end:5 + 1 = 6 = g) 拼接从end+1的位置到末尾
reverseStr += str.substring(end + 1);
return reverseStr;
}
return null;
}
//方式三:使用StringBuffer/StringBuilder 替换String 优化
//使用StringBuffer/StringBuilder看是否涉及多线程问题,如果没有用Builder
public String reverse3(String str, int start, int end){
if(str != null && str.length() != 0){
StringBuilder builder = new StringBuilder(str.length());
//第一部分 将[0,2) --> ab 添加到builder里
builder.append(str.substring(0,start));
//第二部分 倒着取
for (int i = end; i >= start; i--) {
builder.append(str.charAt(i)); //charAt指定i位置上的元素append到现在的builder上
}
//第三部分 拼接 从end+1的位置到末尾
builder.append(str.substring(end +1));
//转换成String方式
return builder.toString();
}
return null;
}
@Test
public void testReverse() {
String str = "abcdefg";
//调用reverse方法
String reverse = reverse3(str, 2, 5);
System.out.println(reverse);
}
}
3)获取一个字符串在另一个字符串中出现的次数。
比如:获取“ ab”在 “abkkcadkabkebfkabkskab” 中出现的次数
public class StringDemo1 {
/**
* 获取subStr在mainStr中出现的次数
* @param mainStr
* @param subStr
* @return
*/
public int getCount(</